How do you merge images into a canvas using PIL/Pillow?

pythonee picture pythonee · May 18, 2012 · Viewed 46.5k times · Source

I'm not familiar with PIL, but I know it's very easy to put a bunch of images into a grid in ImageMagick.

How do I, for example, put 16 images into a 4×4 grid where I can specify the gap between rows and columns?

Answer

fraxel picture fraxel · May 18, 2012

This is easy to do in PIL too. Create an empty image and just paste in the images you want at whatever positions you need using paste. Here's a quick example:

import Image

#opens an image:
im = Image.open("1_tree.jpg")
#creates a new empty image, RGB mode, and size 400 by 400.
new_im = Image.new('RGB', (400,400))

#Here I resize my opened image, so it is no bigger than 100,100
im.thumbnail((100,100))
#Iterate through a 4 by 4 grid with 100 spacing, to place my image
for i in xrange(0,500,100):
    for j in xrange(0,500,100):
        #I change brightness of the images, just to emphasise they are unique copies.
        im=Image.eval(im,lambda x: x+(i+j)/30)
        #paste the image at location i,j:
        new_im.paste(im, (i,j))

new_im.show()

enter image description here