Hi,

I'd like to resize an image by scaling each of its pixels by the same
factor.

I've tried using Image.resize() with the filter set to NEAREST, but I
find that the pixels in the original image do not all end up the same
size in the new image. Do I have the wrong idea about what NEAREST
does?

Here is an example to demonstrate my problem (using numpy to avoid
needing an image file, and to make it easier to show the results in
text; you could instead use a 4x4 image and the .show() method of
Image to see what I'm talking about):

python> import Image,numpy
python> a = numpy.array([[255,0,255,0],[0,255,0,255],
    ... [255,0,255,0],[0,255,0,255]],dtype=numpy.uint8)
python> a
array([[255,   0, 255,   0],
       [  0, 255,   0, 255],
       [255,   0, 255,   0],
       [  0, 255,   0, 255]], dtype=uint8)
python> i=Image.fromarray(a)
python> i2=i.resize((6*4,6*4),Image.NEAREST)

I expected each pixel in i to have been enlarged to be 6x6 in i2, but
that doesn't seem to have happened. Here is the first column of the
image:

python> numpy.array(i2)[:,0]
array([255, 255, 255, 255, 255, 255, 255,   0,   0,   0,   0,   0, 255,
       255, 255, 255, 255, 255, 255,   0,   0,   0,   0,   0], dtype=uint8)

Why hasn't each pixel been enlarged to have a side of length 6? The
first pixel has been enlarged to have side of length 7, the next
length 5, then 7, then 5.

Thanks,
Chris

P.S. I'm using PIL 1.1.6.

_______________________________________________
Image-SIG maillist  -  Image-SIG@python.org
http://mail.python.org/mailman/listinfo/image-sig

Reply via email to