2012-02-09 151 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的默認安裝工作