How do you composite an image onto another image with PIL in Python?

Sebastian picture Sebastian · Apr 1, 2010 · Viewed 87.4k times · Source

I need to take an image and place it onto a new, generated white background in order for it to be converted into a downloadable desktop wallpaper. So the process would go:

  1. Generate new, all white image with 1440x900 dimensions
  2. Place existing image on top, centered
  3. Save as single image

In PIL, I see the ImageDraw object, but nothing indicates it can draw existing image data onto another image. Suggestions or links anyone can recommend?

Answer

unutbu picture unutbu · Apr 1, 2010

This can be accomplished with an Image instance's paste method:

from PIL import Image
img = Image.open('/path/to/file', 'r')
img_w, img_h = img.size
background = Image.new('RGBA', (1440, 900), (255, 255, 255, 255))
bg_w, bg_h = background.size
offset = ((bg_w - img_w) // 2, (bg_h - img_h) // 2)
background.paste(img, offset)
background.save('out.png')

This and many other PIL tricks can be picked up at Nadia Alramli's PIL Tutorial