2012-02-09 126 views
5

我试图加载我的.jpg文件,它引发错误,但是如果我再试一次,就没关系!为什么??Python PIL,图片。 image.load()后出现错误

我的代码和错误:

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

谢谢!

+0

的消息表明你绑加载图像是(可能)缺少一些尾随字节。为什么它会互相影响,我不知道,因为你不说图像是静态的,等等。 – 2012-02-09 13:41:59

+0

谢谢你的回答!图像是静态的。 – Hare 2012-02-09 15:20:11

回答

8

PIL使用延迟加载,这意味着图像实际上并未从文件中读取,直到您尝试对其执行操作为止。第一次调用load就是第一个操作,所以这就是检测到文件格式问题的时候。对load的第二次调用不会再次读取文件,它只是返回文件加载时缓存的信息。

+0

呵呵......只是现在我注意到OP提到的第二次调用'load'就是在这个例子中... – 2012-02-09 16:44:25

+0

嗯,对不起,我没有告诉第一次调用image.show时发生了类似的错误。第二个调用image.show是ок。 – Hare 2012-02-09 17:44:33

+0

@Hare,同样的推理适用。 “open”请求不会读取整个文件,所以它不会得到错误。无论是“load”还是“show”,第一个操作都会导致整个文件被读取,并检测到文件缺陷。 – 2012-02-09 18:27:16

19

我有这个相同的问题,并提出了我在这里讨论的解决方案:https://stackoverflow.com/a/23575424/3622198

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

from PIL import ImageFile 
ImageFile.LOAD_TRUNCATED_IMAGES = True 

...你应该是好去!

编辑:它看起来像这样有助于用枕头捆绑(“PIP安装枕头”)的版本PIL的,但可能不适合PIL的默认安装工作