I want to resize an image in pillow-python, however I have 2 functions of choice to use:
Image.resize
http://pillow.readthedocs.org/en/latest/reference/Image.html#PIL.Image.Image.resize
and
Image.thumbnail
http://pillow.readthedocs.org/en/latest/reference/Image.html#PIL.Image.Image.thumbnail
Both definitions point out to resizing the image, Which one should I be using?
To resize an image, you call the resize() method on it, passing in a two-integer tuple argument representing the width and height of the resized image. The function doesn't modify the used image; it instead returns another Image with the new dimensions.
Resizing images is an integral part of the web, whether to display images on your website or app, store lower-resolution images, or generate a training set for neural networks. Python offers a rich set of options to perform some of the routine image resizing tasks.
The Image module from pillow library has an attribute size. This tuple consists of width and height of the image as its elements. To resize an image, you call the resize() method of pillow's image class by giving width and height.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With