[Image-SIG] 16bit TIFF files: error in Image.putpixel()

Tim Hoffmann hoffmann at hiskp.uni-bonn.de
Thu Jan 22 21:05:29 CET 2009


Hello,

I think I found a bug in Image.putpixel() for 16bit images. It writes 
the given x coordinates in bytes, not pixels. i.e. x==0 is lower byte of 
pixel 0, x==1 addresses upper byte of pixel zero. y indices are ok.


The following code shows the problem (using PIL 1.1.6):


im = Image.open("text16black.tif")
     print im.format, im.size, im.mode
     dx = size[0]
	
     for i in range(0, dx):
         # reopening to restore data every time
         im = Image.open("test16black.tif")
         im.putpixel((i, 0), 2)
         print [im.getpixel((x, 0)) for x in range(0, dx)]

output (for completely black test image):

TIFF (9, 15) I;16
[2, 0, 0, 0, 0, 0, 0, 0, 0]
[512, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 2, 0, 0, 0, 0, 0, 0, 0]
[0, 512, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 2, 0, 0, 0, 0, 0, 0]
[0, 0, 512, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 2, 0, 0, 0, 0, 0]
[0, 0, 0, 512, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 2, 0, 0, 0, 0]



Because of range checking based on the pixels I cannot even work around 
supplying the data in an appropriate format. There is no way to address 
the right half of the line.

BTW the same problem occurs in putdata().

Thanks for your comments,
Tim




More information about the Image-SIG mailing list