14

当我PIL==1.1.7用来加载 TIFF 图像时,它似乎弄错了色彩空间:

错误的色彩空间转换

这是怎么回事?

  • .tiff是使用创建的convert test.jpg test.tiff(但似乎也发生在其他 tiff 文件中)
  • 可在以下网址找到: http: //hul.wolever.net/dump/test.tiff
  • 时的输出PIL.Image.DEBUG = True
>>> 从 PIL 导入图像
>>> Image.DEBUG = True
>>> Image.open("/tmp/test.tiff").show()
标签:ImageWidth(256)-类型:短(3)-值:(560,)
标签:ImageLength(257)-类型:短(3)-值:(401,)
标签:BitsPerSample (258) - 类型:短 (3) - 值:(8, 8, 8)
标签:压缩(259)-类型:短(3)-值:(7,)
标签:PhotometricInterpretation(262)-类型:短(3)-值:(2,)
标签:FillOrder (266) - 类型:短 (3) - 值:(1,)
标签:DocumentName (269) - 类型:ascii (2) - 值:/tmp/lemur.tiff
标签:StripOffsets (273) - 类型:long (4) - 值:(8, 9282, 18712, 28312, 38000, 48730, 59052, 70406, 83010, 95978, 108967, 121029, 133136, 1455555, 1574179, 15741943, , 191157, 202954, 214664, 226914, 238919, 250547, 261871, 273282, 284453)
标签:方向(274)-类型:短(3)-值:(1,)
标签:SamplesPerPixel(277)-类型:短(3)-值:(3,)
标签:RowsPerStrip(278)-类型:短(3)-值:(16,)
标签:StripByteCounts (279) - 类型:long (4) - 值:(9274, 9430, 9600, 9688, 10730, 10322, 11354, 12604, 12968, 12989, 12062, 12107, 12419, 11856, 10878, 1178, 11742 , 11797, 11710, 12250, 12005, 11628, 11324, 11411, 11171, 2541)
标签:XResolution (282) - 类型:有理数 (5) - 值:((1207959552, 16777216),)
标签:YResolution (283) - 类型:理性 (5) - 值:((1207959552, 16777216),)
标签:PlanarConfiguration(284)-类型:短(3)-值:(1,)
标签:ResolutionUnit(296)-类型:短(3)-值:(1,)
标签:PageNumber (297) - 类型:短 (3) - 值:(0, 1)
标签:JPEGTables(347)-类型:未定义(7)-值:????C??

???}!1AQa"q2??#B??R??$3br?  
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??????????????????????????????????????????? ????????????????????????????????????
标签:YCbCrSubSampling (530) - 类型:短 (3) - 值:(2, 2)
*** 概括 ***
- 压缩:JPEG
- photometric_interpretation:2
- 平面配置:1
- 填充订单:1
- 尺寸:(560、401)
格式键:('II', 2, 1, 1, (8, 8, 8), ())
- 原始模式:RGB
- pil模式:RGB
4

1 回答 1

12

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

请参阅此处的详细答案,我相信这正是您的情况。

您可能的解决方案是使用其他方法(没有压缩的 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')
于 2012-10-18T05:15:59.953 回答