首页 文章

Python PIL错误地解码TIFF颜色(使用不正确的颜色空间)?

提问于
浏览
13

当我使用 PIL==1.1.7 加载TIFF图像时,似乎错误的颜色空间:

bad colorspace conversion

这是怎么回事?

  • .tiff 是使用 convert test.jpg test.tiff 创建的(但似乎也与其他tiff文件一起发生)

  • 可以在以下网址找到:http://hul.wolever.net/dump/test.tiff

  • PIL.Image.DEBUG = True 时的输出:

>>> from PIL import Image
>>> Image.DEBUG = True
>>> Image.open("/tmp/test.tiff").show()
tag: ImageWidth (256) - type: short (3) - value: (560,)
tag: ImageLength (257) - type: short (3) - value: (401,)
tag: BitsPerSample (258) - type: short (3) - value: (8, 8, 8)
tag: Compression (259) - type: short (3) - value: (7,)
tag: PhotometricInterpretation (262) - type: short (3) - value: (2,)
tag: FillOrder (266) - type: short (3) - value: (1,)
tag: DocumentName (269) - type: ascii (2) - value: /tmp/lemur.tiff
tag: StripOffsets (273) - type: long (4) - value: (8, 9282, 18712, 28312, 38000, 48730, 59052, 70406, 83010, 95978, 108967, 121029, 133136, 145555, 157411, 168289, 179433, 191157, 202954, 214664, 226914, 238919, 250547, 261871, 273282, 284453)
tag: Orientation (274) - type: short (3) - value: (1,)
tag: SamplesPerPixel (277) - type: short (3) - value: (3,)
tag: RowsPerStrip (278) - type: short (3) - value: (16,)
tag: StripByteCounts (279) - type: long (4) - value: (9274, 9430, 9600, 9688, 10730, 10322, 11354, 12604, 12968, 12989, 12062, 12107, 12419, 11856, 10878, 11144, 11724, 11797, 11710, 12250, 12005, 11628, 11324, 11411, 11171, 2541)
tag: XResolution (282) - type: rational (5) - value: ((1207959552, 16777216),)
tag: YResolution (283) - type: rational (5) - value: ((1207959552, 16777216),)
tag: PlanarConfiguration (284) - type: short (3) - value: (1,)
tag: ResolutionUnit (296) - type: short (3) - value: (1,)
tag: PageNumber (297) - type: short (3) - value: (0, 1)
tag: JPEGTables (347) - type: undefined (7) - value: ????C??

???}!1AQa"q2??#B??R??$3br?  
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz???????????????????????????????????????????????????????????????????????????
tag: YCbCrSubSampling (530) - type: short (3) - value: (2, 2)
*** Summary ***
- compression: jpeg
- photometric_interpretation: 2
- planar_configuration: 1
- fill_order: 1
- size: (560, 401)
format key: ('II', 2, 1, 1, (8, 8, 8), ())
- raw mode: RGB
- pil mode: RGB

1 回答

  • 9

    这很可能是因为您的TIFF图像包含Adobe Photoshop生成的压缩JPEG数据,该数据使用特殊标记来指示正确的色彩空间 . 我猜PIL不知道这个标记(至少在TIFF嵌入的JPEG中),所以它假设图像在YCbCr颜色空间(我们可以在屏幕截图中看到) .

    看到详细的答案here,我相信这正是你的情况 .

    您可能的解决方案是使用其他方法转换JPEG(无压缩JPEG数据) . 例如,如果PIL设法正确打开您的JPEG,您可以使用PIL重写TIFF:

    from PIL import Image
    img = Image.open("test.jpg")
    tif = Image.new("RGB", img.size)
    tif.paste(img)
    tif.save('result.tiff')
    

相关问题