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

Dan Blacker dan.blacker at googlemail.com
Mon Apr 12 13:42:19 CEST 2010


Hi Sebastian,

Yes I am scanning film and need to retain the as much of the color
information as possble, so 16bit is essential.

Could I perhaps do a convert with imagemagick - that would turn it into a
16bit tif file that PIL could read properly?

Cheers,
Dan





On 12 April 2010 12:32, Sebastian Haase <seb.haase at gmail.com> wrote:

> 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
> >> >
> >> >
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/image-sig/attachments/20100412/dd0b56d5/attachment-0001.html>


More information about the Image-SIG mailing list