Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to crop from one image and paste into another with PIL?

With PIL, I am trying to copy a rectangle out of an image, and paste it into another. This is my code:

import Image
ii = Image.open("ramza.png")
box = (70, 70, 30, 30)
region = ii.crop(box)
io = Image.open("template.png")
io.paste(region, box)
io.save("output.png")

And I am getting this error:

ValueError: images do not match

Do any of you know a fix to this?

like image 984
Nick Avatar asked Apr 19 '11 22:04

Nick


2 Answers

A PIL crop box is defined as a 4-tuple of pixel coordinates: (left, upper, right, lower).

To fix your code to get a 30x30 crop:

box = (70, 70, 100, 100)

Broken down into components:

x, y, w, h = (70, 70, 30, 30)
box = (x, y, x + w, y + h)
like image 174
samplebias Avatar answered Nov 01 '22 18:11

samplebias


For future visitors: this error may also come up if the box argument to paste contains floats instead of ints.

like image 37
David Wolever Avatar answered Nov 01 '22 17:11

David Wolever