Python PIL,图像载入后出现错误。

6

我试图加载我的 .jpg 文件,但它引发了错误,但如果我再试一次,就可以正常工作!为什么?

我的代码和错误信息:

>>> import Image
>>> im1 = Image.open('/tmp/test.jpg')
>>> im1.load()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/site-packages/PIL/ImageFile.py", line 201, in load
raise IOError("image file is truncated (%d bytes not processed)" % len(b))
IOError: image file is truncated (0 bytes not processed)
>>> im1.load()
<PixelAccess object at 0x7feffc2a1170>
>>>

谢谢!


该消息提示您正在尝试加载的图像(很可能)缺少一些尾随字节。为什么它会间歇性地工作,我不知道,因为您没有说这个图像是否是静态的等原因。 - Ricardo Cárdenes
谢谢你的回答!这张图片是静态的。 - Hare
2个回答

20

我曾遇到过同样的问题,并想出了解决方法,这里进行了讨论:https://dev59.com/_Gcs5IYBdhLWcg3wSR7H#23575424

在你的代码块之前,只需添加以下内容:

from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

...然后你就可以顺利进行了!

编辑:这似乎对于捆绑在Pillow中的PIL版本(“pip install pillow”)有帮助,但可能不适用于默认安装的PIL。


8
PIL使用延迟加载,这意味着图像直到您尝试执行操作时才从文件中实际读取。第一次调用load是第一个动作,因此在此时检测到文件格式的问题。第二次调用load不会再次读取文件,它只返回在加载文件时缓存的信息。

哦...现在我才注意到OP提到的第二次调用load是在例子中... - Ricardo Cárdenes
抱歉,我没有说清楚,当第一次调用image.show时会出现类似的错误。第二次调用image.show就可以了。 - Hare
@Hare,同样的推理适用。open请求不会读取整个文件,因此不会出现错误。无论是load还是show,第一个操作都会导致整个文件被读取,并检测到文件缺陷。 - Mark Ransom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接