Как решить IOError: сломанный поток данных при чтении файла изображения?

Я работаю под Ubuntu 11.04. Я пытаюсь работать с PIL в своем проекте Django. К сожалению, PIL не может загрузить мое изображение.

Вот сводка настройки PIL:

PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version       1.1.7
platform      linux2 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
              [GCC 4.5.2]
--------------------------------------------------------------------
*** TKINTER support not available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
--- LITTLECMS support available
--------------------------------------------------------------------

Я пробовал кодировать в оболочке Python, и он возвращает ошибку, когда я вызываю функцию load():

>>> import PIL
>>> import Image
>>> import _imaging
>>> i = Image.open("someimage.jpg")
>>> i
<JpegImagePlugin.JpegImageFile image mode=RGB size=600x599 at 0x9646C0C>
>>> i.load()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/joseph/Desktop/thesis/env/lib/python2.7/site-packages/PIL/ImageFile.py", line 215, in load
raise_ioerror(e)
File "/home/joseph/Desktop/thesis/env/lib/python2.7/site-packages/PIL/ImageFile.py", line 52, in raise_ioerror
raise IOError(message + " when reading image file")
IOError: broken data stream when reading image file

Я также работаю в виртуальной среде, у меня проблемы с загрузкой изображения jpeg в мой проект Django. PNG работает нормально, но JPEG не принимает.


person Joseph Lafuente    schedule 04.10.2011    source источник
comment
Вы уверены, что этот файл изображения правильный? Возможности просмотреть его в другой программе не обязательно достаточно. Можете ли вы использовать любые другие изображения без ошибок?   -  person wberry    schedule 04.10.2011
comment
да, этот файл изображения правильный. png работает нормально, а jpeg нет. Я использую libjpeg8b кстати.   -  person Joseph Lafuente    schedule 05.10.2011


Ответы (3)


sudo apt-get install libjpeg8-dev

пересоберите PIL и установите снова.

person Joseph Lafuente    schedule 06.10.2011

У меня была та же проблема, но, к сожалению, мы использовали RHEL, у которого была только libjpeg 6b.

При дальнейшем изучении этой проблемы эта ошибка возникает, когда вы используете функцию JPEG, которая не поддерживается в используемой вами версии libjpeg. В моем случае это было арифметическое кодирование (введено в версии 7).

Я нашел страницу википедии на libjpeg, чтобы определить, какие типы файлов JPEG могут быть какие версии открываются. так...

TL;DR

Обновите libjpeg, если можете, или пересохраните изображения как базовые JPEG.

person AaronAsAChimp    schedule 24.12.2012

Используйте Pillow и сообщать о проблемах по мере их возникновения, и команда Pillow их исправит. Бонусные баллы за отправку запроса на включение вместе с отчетом о проблеме. Также см.: https://stackoverflow.com/a/7770547/185820

person aclark    schedule 27.03.2013