2012-02-09 38 views
5

Tôi đang cố gắng tải tệp .jpg của mình và nó gây ra lỗi, nhưng nếu tôi thử lại, thì được rồi! Tại sao??PIL Python, Hình ảnh. Lỗi sau khi image.load()

Mã của tôi và báo lỗi:

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

Cảm ơn bạn!

+0

Thông điệp cho thấy hình ảnh mà bạn đang buộc để tải là (có thể) thiếu một số byte theo sau. Tại sao nó làm việc liên tục, tôi không biết, như bạn không nói nếu hình ảnh là tĩnh, vv –

+0

Cảm ơn bạn đã trả lời! Hình ảnh tĩnh. – Hare

Trả lời

8

PIL sử dụng tải chậm, có nghĩa là hình ảnh không thực sự được đọc từ tệp cho đến khi bạn cố thực hiện tác vụ trên đó. Cuộc gọi đầu tiên tới load là hành động đầu tiên, vì vậy đó là khi phát hiện thấy vấn đề với định dạng tệp. Cuộc gọi thứ hai tới load không đọc lại tệp, nó chỉ trả về thông tin được lưu trong bộ nhớ cache khi tệp được tải.

+0

Heh ... Chỉ bây giờ tôi mới nhận thấy rằng cuộc gọi thứ hai để tải 'được đề cập bởi OP là trong ví dụ ... –

+0

Hm, xin lỗi, tôi đã không nói rằng lỗi tương tự xảy ra khi cuộc gọi đầu tiên là image.show . Cuộc gọi thứ hai là image.show là ок. – Hare

+0

@Hare, cùng một lý do được áp dụng. Yêu cầu 'mở' không đọc toàn bộ tệp để nó không nhận được lỗi. Các hoạt động đầu tiên cho dù đó là 'tải' hoặc' show' gây ra toàn bộ tập tin được đọc, và lỗi tập tin được phát hiện. –

19

Tôi đã có cùng một vấn đề này và đưa ra giải pháp mà tôi thảo luận tại đây: https://stackoverflow.com/a/23575424/3622198.

Một nơi nào đó trước khi khối mã của bạn, chỉ cần thêm những điều sau đây:

from PIL import ImageFile 
ImageFile.LOAD_TRUNCATED_IMAGES = True 

... và bạn sẽ được tốt để đi!

EDIT: Có vẻ như điều này giúp cho các phiên bản của PIL kèm với Gối ("PIP cài đặt gối"), nhưng có thể không hoạt động cho việc cài đặt mặc định của PIL

Các vấn đề liên quan