Nick
Nick

Reputation: 161

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?

Upvotes: 10

Views: 13243

Answers (2)

David Wolever
David Wolever

Reputation: 154564

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

Upvotes: 4

samplebias
samplebias

Reputation: 37919

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)

Upvotes: 17

Related Questions