On Apr 6, 3:05 am, Peter Otten <__pete...@web.de> wrote: > Tim Eichholz wrote: > > I'm trying to cut a BMP with 80 adjacent frames down to 40 using the > > Image.copy and .paste functions but I'm getting error "ValueError: > > images do not match" on the paste line. > > newimage.paste(cols[f], (f*framew, 0, (f*framew)+192, 192)) > > The 4-tuple doesn't match the size of the image you are pasting: > > >>> from PIL import Image > >>> image = Image.open("tmp1.png") > >>> image.size > (134, 400) > >>> image.paste(image, (0, 0, 134, 400)) # correct size --> works > >>> image.paste(image, (0, 0, 134, 300)) # wrong size --> raises exception > > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > File "/usr/lib/python2.6/dist-packages/PIL/Image.py", line 1077, in paste > self.im.paste(im, box) > ValueError: images do not match > > You can add > > for index, image in enumerate(cols): > print "image %d --> %s" % (index, image.size) > # image.save("tmp%d.png" % index) > > to your code to learn the actual size of your intermediate images. > After you have fixed the size problem and see that the resulting image > doesn't meet your expectations (likely, don't despair) you can uncomment the > image.save(...) statement and have a look at the intermediate images. > > A hint about counting loops: instead of > > x = 0 > while x < n: > ... > x = x + 1 > > it is idiomatic python to write > > for x in range(n): > ... > > and > > x = 0 > while x < total_width: > # ... > x += single_width > > is typically expressed as > > for x in range(0, total_width, single_width): > ... > > Have a look at the tutorial for more basic tips. > > Peter
I think maybe I am using the wrong function. I want to paste the entire 192x192 contents of cols[f] into newimage. I would think it works like newimage.paste(cols[f], (x, 0, 192+x, 192)) if that's not it I think I'm missing a function -- http://mail.python.org/mailman/listinfo/python-list