PIL question

Peter Otten __peter__ at web.de
Tue Apr 6 05:47:51 EDT 2010


Tim Eichholz wrote:

> 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

Don't "think"! Read the documentation or, if that is hard to understand, 
write a tiny script that excercises only the function in question.


I can't test your script because it's not "self-contained" (doesn't run 
without user input), but I'm quite certain that the images that you generate 
with

c = 1
while c <= ncols:
        cols += [image.crop((framew*c, 0, frameh*(c+1), frameh*(c+1)))]
        c += 1

are not of the size 192x192. Assuming 

>>> framew = frameh = 192
>>> ncols = 3
>>> c = 1
>>> while c <= ncols:
...     box = framew*c, 0, frameh*(c+1), frameh*(c+1)
...     print "width =", box[2] - box[0], "height =", box[3] - box[1]
...     c += 1
...
width = 192 height = 384
width = 192 height = 576
width = 192 height = 768

See? You need to redo the maths and go through every step of your script, 
throw in some diagnostics code to verify that it does what you expect, and 
only then proceed to the next operation.

My hunch is that crop() doesn't do what you want rather than paste(), but to 
be sure you'd have to explain in plain English what the final image should 
look like.

Peter




More information about the Python-list mailing list