我试图在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
答案 0 :(得分:5)
PIL并不喜欢标题中的损坏数据,并且在您发现后会失败。
我已经向Pillow(友好的PIL分叉)发出拉取请求,应该解决这个问题。
它还没有被接受,但希望它会在几个月内推出2.5.0版本。在此期间,您可以在此处试用:https://github.com/python-imaging/Pillow/pull/647
作为一种解决方法,您可以使用像ImageMagick这样的东西来首先将有问题的图像转换为像png这样的图像,然后在PIL / Pillow中使用它们。