Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between Image.resize and Image.thumbnail in Pillow-Python

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?

like image 811
wolfgang Avatar asked Mar 31 '15 11:03

wolfgang


People also ask

What is image resize in Python?

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.

Why do we need to resize images in Python?

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.

How do I resize a photo on a pillow?

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.


2 Answers

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.

like image 133
wolfgang Avatar answered Sep 19 '22 09:09

wolfgang


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.

like image 36
Ernst Plesiutschnig Avatar answered Sep 21 '22 09:09

Ernst Plesiutschnig