Python – How to resize an image using PIL and maintain its aspect ratio


Is there an obvious way to do this that I'm missing? I'm just trying to make thumbnails.

Best Solution

Define a maximum size. Then, compute a resize ratio by taking min(maxwidth/width, maxheight/height).

The proper size is oldsize*ratio.

There is of course also a library method to do this: the method Image.thumbnail.
Below is an (edited) example from the PIL documentation.

import os, sys
import Image

size = 128, 128

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
            im =
            im.thumbnail(size, Image.ANTIALIAS)
  , "JPEG")
        except IOError:
            print "cannot create thumbnail for '%s'" % infile