What is the difference between Image.resize and Image.thumbnail in Pillow-Python
Solution 1:
Image.resize
resizes to the dimensions you specify:
Image.resize([256,512],PIL.Image.ANTIALIAS) # resizes to 256x512 exactly
Image.thumbnail
resizes to the largest size that (a) preserves the aspect ratio, (b) does not exceed the original image, and (c) does not exceed the size specified in the arguments of thumbnail
.
Image.thumbnail([256, 512],PIL.Image.ANTIALIAS) # resizes 512x512 to 256x256
Furthermore, calling thumbnail
resizes it in place, whereas resize
returns the resized image.
Solution 2:
Two examples for thumbnailing, one taken from geeksforgeeks:
# importing Image class from PIL package
from PIL import Image
# creating a object
image = Image.open(r"C:\Users\System-Pc\Desktop\python.png")
MAX_SIZE = (100, 100)
image.thumbnail(MAX_SIZE)
# creating thumbnail
image.save('pythonthumb.png')
image.show()
The second example relates to Python/Django.
If you do that on a django model.py, you modify the def save(self,*args, **kwargs)
method - like this:
class Profile(models.Model):
user=models.OneToOneField(User, on_delete=models.CASCADE)
image=models.ImageField(default='default.jpg', upload_to='img_profile')
def __str__(self):
return '{} Profile'.format(self.user.email)
# Resize the uploaded image
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
img=Image.open(self.image.path)
if img.height > 100 or img.width >100:
Max_size=(100,100)
img.thumbnail(Max_size)
img.save(self.image.path)
else:
del img
In the last example both images remain stored in the file system on your server.