使用损坏的标头读取Python(PIL)中的JPEG

时间:2014-03-24 13:22:34

标签: python image jpeg python-imaging-library

我试图在Python 2.7中打开一个jpeg文件,

from PIL import Image
im = Image.open(filename)

哪个对我不起作用,

>>> im = Image.open(filename)
Traceback (most recent call last):
  File "<pyshell#810>", line 1, in <module>
    im = Image.open(filename)
  File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1980, in open
    raise IOError("cannot identify image file")
IOError: cannot identify image file

虽然在尝试外部观众时,它开得很好。进一步挖掘,结果是来自JpegImageFile._open的{​​{1}}文件的PIL方法由于几个无关的JpegImagePlugin.py而引发SyntaxError异常JPEG文件头中0x00标记之前的字节

0xFFDA

也就是说,虽然我尝试的其他程序只是忽略了标题末尾的未知Corrupt JPEG data: 5 extraneous bytes before marker 0xda 标记,但0x00更喜欢引发异常,而不允许我打开图像。

问题:除了直接编辑PIL代码之外,是否有任何解决方法可以打开带有问题标题的JPEG?

为了您的方便,下面显示了引发异常的PIL类的相关代码:

JpegImageFile

1 个答案:

答案 0 :(得分:5)

PIL并不喜欢标题中的损坏数据,并且在您发现后会失败。

我已经向Pillow(友好的PIL分叉)发出拉取请求,应该解决这个问题。

它还没有被接受,但希望它会在几个月内推出2.5.0版本。在此期间,您可以在此处试用:https://github.com/python-imaging/Pillow/pull/647

作为一种解决方法,您可以使用像ImageMagick这样的东西来首先将有问题的图像转换为像png这样的图像,然后在PIL / Pillow中使用它们。