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

2019-08-01 12:02发布

当我使用PIL==1.1.7加载TIFF图像,它似乎对色彩空间错误:

这是怎么回事?

  • .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

Answer 1:

这很可能是由于你的TIFF图像包含压缩通过Adobe公司的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')


文章来源: Python PIL incorrectly decoding TIFF colors (using incorrect colorspace)?