Hi, I'm trying to use the function paste() to paste a image into another image but I can't get it work! Is it the right function to use or is there any other function that's better?

Here's my very simple code:

from PIL import Image
import ImageDraw

im = Image.new("RGB", (500,500), "white")
draw = ImageDraw.Draw(im)

icon = Image.open("icon1.jpg")
im.paste(icon, (0,0,86,62))

del draw
im.save("test.jpg", "JPEG")

and the message:

Traceback (most recent call last):
  File "C:\Program Files\Eclipse 3.2.2\plugins\org.python.pydev.debug_1.3.4\pysrc\pydevd.py", line 754, in <module>
    debugger.run(setup['file'], None, None)
  File "C:\Program Files\Eclipse 3.2.2\plugins\org.python.pydev.debug_1.3.4\pysrc\pydevd.py", line 597, in run
    execfile(file, globals, locals) #execute the script
  File "C:\Documents and Settings\eviceng\My Documents\Python\cellTestare\src\paste.py", line 8, in <module>
    im.paste(icon, (0,0,86,62))
  File "C:\Python25\Lib\site-packages\PIL\Image.py", line 1076, in paste
    self.im.paste(im, box)
ValueError: images do not match

Recommended Answers

All 5 Replies

Make sure you give it the correct size of the icon ...

from PIL import Image
import ImageDraw
 
im = Image.new("RGB", (500,500), "white")
draw = ImageDraw.Draw(im)
 
icon = Image.open("icon1.jpg")
# get the correct size
x, y = icon.size
im.paste(icon, (0,0,x,y))
 
del draw
im.save("test.jpg", "JPEG")
 
# optional, show the saved image in the default viewer (works in Windows)
import webbrowser
webbrowser.open("test.jpg")

Are you really sure? Because I know (86,62) is the right height and width. I can't test your code but I'll do first thing in the morning.

If I remember right I changed that line to icon.getbbox(), like this, before I went home from work:

im.paste(icon, icon.getbbox())

and I got a white image, nothing in there when I opened the image.

Strange, either method works fine for me!

I have Windows XP. What OS are you using? Shouldn't make a difference. Is your icon file a true JPEG?

Use ...

print icon.mode

this should show "RGB"

Okej.. When I ran this script I was in, I think, windows 2000 - but in the end my script have to work on unix..

Do you get it working, a image paste into another? This is very strange.. I'll test the code you wrote tomorrow and then we'll see. I'll get back if it somehow doesn't work!

Ahh, your code is working! But I now know why my script didn't work: I'm using the aggdraw module with PIL. my code look like this:

from PIL import Image
import ImageDraw
import aggdraw
 
im = Image.new("RGB", (500,500), "white")
draw = aggdraw.Draw(im)
 
icon = Image.open("icon.jpg")
# get the correct size
x, y = icon.size
im.paste(icon, (0,0,x,y))
 
draw.flush()
im.save("test.jpg", "JPEG")

and it's mostly the same and the only thing, that i can see, that isn't the same is:

draw = aggdraw.Draw(im)

and

draw.flush()

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.