[Image-SIG] python PIL 16-bit tiff files

Sebastian Haase seb.haase at gmail.com
Mon Apr 12 13:32:32 CEST 2010


Hi,

are you sure it makes even sense to save a 16-bit RGB image ? This is
not meant as an excuse for PIL to not support it,
but 16mio colors should likely be enough for any application (i.e.
8bit per R,G and B)

Regards,
Sebastian Haase


On Mon, Apr 12, 2010 at 10:33 AM, Dan Blacker
<dan.blacker at googlemail.com> wrote:
> Hi Sebastian,
>
> Thanks so much for having a look at this,
>
> The image file is actually from an Epson v700 scanner, scanned using Vuescan
> in Ubuntu.
>
> It is an RGB image, not a grayscale one.
>
> Do you think I will be able to use this image with PIL? WIll I need to patch
> my version?
>
> Thanks again,
> Dan
>
>
>
>
>
> On 12 April 2010 08:37, Sebastian Haase <seb.haase at gmail.com> wrote:
>>
>> Hi Dan,
>>
>> I'm running a patched version of PIL 1.1.6 and could open all (I
>> thought) 16-bit TIF images in the past.
>> But with yours I also got
>> IOError("cannot identify image file")
>>
>> To find out what the problem is I used ImageMagick
>> $: identify Download/16_bit_example.tif
>> Download/16_bit_example.tif TIFF 318x336 318x336+0+0 16-bit
>> DirectClass 645KB 0.000u 0:00.010
>>
>> So far this look fine.
>> But trying to use PIL's TIF module directly, I find:
>> >>> import TiffImagePlugin
>> >>> fp = open("/home/shaase/Download/16_bit_example.tif")
>> >>>
>> >>> TiffImagePlugin.TiffImageFile(fp,"/home/shaase/Download/16_bit_example.tif")
>> Traceback (most recent call last):
>>  File "<input>", line 1, in <module>
>>  File "./PIL/ImageFile.py", line 82, in __init__
>>    self._open()
>>  File "./PIL/TiffImagePlugin.py", line 507, in _open
>>    self._seek(0)
>>  File "./PIL/TiffImagePlugin.py", line 535, in _seek
>>    self._setup()
>>  File "./PIL/TiffImagePlugin.py", line 613, in _setup
>>    raise SyntaxError, "unknown pixel mode"
>> >>> pdb.pm()
>> (Pdb) p key
>> ('l', 2, 1, 1, (16, 16, 16), ())
>>
>> Aha, PIL thinks it's an 16-bit RGB image - i.e. not grayscale.
>> Is this correct ?
>>
>> Just for reference, I will paste my list of recognized "key"s below,
>> maybe someone knows what line would have to be added to support your
>> file.
>>
>> Cheers,
>> Sebastian Haase
>>
>> PS: Did you get this file by any chance from a Zeiss Microscope LSM
>> image ? - I just saw that I tried this in the past ...
>>
>> <code from patched 1.1.6
>>
>> TiffImagePlugin.py---------------------------------------------------------------------------------->
>>
>> OPEN_INFO = {
>>    # (ByteOrder, PhotoInterpretation, SampleFormat, FillOrder,
>> BitsPerSample,
>>    #  ExtraSamples) => mode, rawmode
>>    ('l', 0, 1, 1, (1,), ()): ("1", "1;I"),
>>    ('l', 0, 1, 2, (1,), ()): ("1", "1;IR"),
>>    ('l', 0, 1, 1, (8,), ()): ("L", "L;I"),
>>    ('l', 0, 1, 2, (8,), ()): ("L", "L;IR"),
>>    ('l', 1, 1, 1, (1,), ()): ("1", "1"),
>>    ('l', 1, 1, 2, (1,), ()): ("1", "1;R"),
>>    ('l', 1, 1, 1, (8,), ()): ("L", "L"),
>>    ('l', 1, 1, 1, (8,8), (2,)): ("LA", "LA"),
>>    ('l', 1, 1, 2, (8,), ()): ("L", "L;R"),
>>    ('l', 1, 1, 1, (16,), ()): ("I;16", "I;16"),
>>    ('l', 1, 2, 1, (16,), ()): ("I;16S", "I;16S"),
>>    ('l', 1, 2, 1, (32,), ()): ("I", "I;32S"),
>>    ('l', 1, 3, 1, (32,), ()): ("F", "F;32F"),
>>    ('l', 2, 1, 1, (8,8,8), ()): ("RGB", "RGB"),
>>    ('l', 2, 1, 1, (8,8,0), ()): ("RGB", "RGB"),#seb -- found in
>> LSM(Zeiss) files
>>    #('l', 2, 1, 1, (16,16,16), ()): ("RGB", "RGB"),#seb -- found in
>> LSM(Zeiss) files
>>    ('l', 2, 1, 2, (8,8,8), ()): ("RGB", "RGB;R"),
>>    #seb jeff's ('l', 2, 1, 1, (8,8,8,8), ()): ("RGBX", "RGBX"),#seb
>> -- found in LSM(Zeiss) files
>>    ('l', 2, 1, 1, (8,8,8,8), (0,)): ("RGBX", "RGBX"),
>>    ('l', 2, 1, 1, (8,8,8,8), (1,)): ("RGBA", "RGBa"),
>>    ('l', 2, 1, 1, (8,8,8,8), (2,)): ("RGBA", "RGBA"),
>>    ('l', 2, 1, 1, (8,8,8,8), (999,)): ("RGBA", "RGBA"), # corel draw 10
>>    ('l', 3, 1, 1, (1,), ()): ("P", "P;1"),
>>    ('l', 3, 1, 2, (1,), ()): ("P", "P;1R"),
>>    ('l', 3, 1, 1, (2,), ()): ("P", "P;2"),
>>    ('l', 3, 1, 2, (2,), ()): ("P", "P;2R"),
>>    ('l', 3, 1, 1, (4,), ()): ("P", "P;4"),
>>    ('l', 3, 1, 2, (4,), ()): ("P", "P;4R"),
>>    ('l', 3, 1, 1, (8,), ()): ("P", "P"),
>>    ('l', 3, 1, 1, (8,8), (2,)): ("PA", "PA"),
>>    ('l', 3, 1, 2, (8,), ()): ("P", "P;R"),
>>    ('l', 5, 1, 1, (8,8,8,8), ()): ("CMYK", "CMYK"),
>>    ('l', 6, 1, 1, (8,8,8), ()): ("YCbCr", "YCbCr"),
>>    ('l', 8, 1, 1, (8,8,8), ()): ("LAB", "LAB"),
>>
>>    ('b', 0, 1, 1, (1,), ()): ("1", "1;I"),
>>    ('b', 0, 1, 2, (1,), ()): ("1", "1;IR"),
>>    ('b', 0, 1, 1, (8,), ()): ("L", "L;I"),
>>    ('b', 0, 1, 2, (8,), ()): ("L", "L;IR"),
>>    ('b', 1, 1, 1, (1,), ()): ("1", "1"),
>>    ('b', 1, 1, 2, (1,), ()): ("1", "1;R"),
>>    ('b', 1, 1, 1, (8,), ()): ("L", "L"),
>>    ('b', 1, 1, 1, (8,8), (2,)): ("LA", "LA"),
>>    ('b', 1, 1, 2, (8,), ()): ("L", "L;R"),
>>    ('b', 1, 1, 1, (16,), ()): ("I;16B", "I;16B"),
>>    ('b', 1, 2, 1, (16,), ()): ("I;16BS", "I;16BS"),
>>    ('b', 1, 2, 1, (32,), ()): ("I;32BS", "I;32BS"),
>>    ('b', 1, 3, 1, (32,), ()): ("F;32BF", "F;32BF"),
>>    ('b', 2, 1, 1, (8,8,8), ()): ("RGB", "RGB"),
>>    ('b', 2, 1, 2, (8,8,8), ()): ("RGB", "RGB;R"),
>>    ('b', 2, 1, 1, (8,8,8,8), (0,)): ("RGBX", "RGBX"),
>>    ('b', 2, 1, 1, (8,8,8,8), (1,)): ("RGBA", "RGBa"),
>>    ('b', 2, 1, 1, (8,8,8,8), (2,)): ("RGBA", "RGBA"),
>>    ('b', 2, 1, 1, (8,8,8,8), (999,)): ("RGBA", "RGBA"), # corel draw 10
>>    ('b', 3, 1, 1, (1,), ()): ("P", "P;1"),
>>    ('b', 3, 1, 2, (1,), ()): ("P", "P;1R"),
>>    ('b', 3, 1, 1, (2,), ()): ("P", "P;2"),
>>    ('b', 3, 1, 2, (2,), ()): ("P", "P;2R"),
>>    ('b', 3, 1, 1, (4,), ()): ("P", "P;4"),
>>    ('b', 3, 1, 2, (4,), ()): ("P", "P;4R"),
>>    ('b', 3, 1, 1, (8,), ()): ("P", "P"),
>>    ('b', 3, 1, 1, (8,8), (2,)): ("PA", "PA"),
>>    ('b', 3, 1, 2, (8,), ()): ("P", "P;R"),
>>    ('b', 5, 1, 1, (8,8,8,8), ()): ("CMYK", "CMYK"),
>>    ('b', 6, 1, 1, (8,8,8), ()): ("YCbCr", "YCbCr"),
>>    ('b', 8, 1, 1, (8,8,8), ()): ("LAB", "LAB"),
>> }
>> </code from patched 1.1.6
>>
>> TiffImagePlugin.py---------------------------------------------------------------------------------->
>>
>>
>>
>> On Sat, Apr 10, 2010 at 6:08 PM, Dan Blacker <dan.blacker at googlemail.com>
>> wrote:
>> > Hello, I wonder if anyone can help with this problem:
>> >
>> > I am trying to open 16-bit tif files with the Python Imaging Library,
>> > with
>> > this code:
>> >
>> > im0 = Image.open (incolor)
>> >
>> > I get this error:
>> >
>> > Traceback (most recent call last):
>> >   File "find.frame.py", line 137, in <module>
>> >     im0 = Image.open (incolor)
>> >   File "/usr/lib/python2.6/dist-packages/PIL/Image.py", line 1917, in
>> > open
>> >     raise IOError("cannot identify image file")
>> > IOError: cannot identify image file
>> >
>> > My code works fine with 8bit tiffs. Attatched is an example image file
>> > that
>> > it won't read in.
>> >
>> > Any help would be greatly appreciated
>> > Dan
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > _______________________________________________
>> > Image-SIG maillist  -  Image-SIG at python.org
>> > http://mail.python.org/mailman/listinfo/image-sig
>> >
>> >
>
>


More information about the Image-SIG mailing list