«ОШИБКА: прерванный поток данных при чтении файла изображения» (TrueType шрифты libjpeg и PIL в OS X) - PullRequest
4 голосов
/ 06 июня 2011

Я использую OS X 10.6.7, Python 2.6 и пишу небольшое приложение wxPython, которое использует PIL для манипулирования изображением и добавления к нему некоторого текста.

После нескольких проблем с настройкой работы PIL с libjpeg и PIL я следовал инструкциям на этом сайте .

После запуска python setup.py build_ext -i (из папки Imaging-1.1.7) я получаю:

--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version       1.1.7
platform      darwin 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
          [GCC 4.2.1 (Apple Inc. build 5646)]
--------------------------------------------------------------------
--- TKINTER support available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
--- LITTLECMS support available
--------------------------------------------------------------------

Дополнительно, запустив python selftest.py в папке установки Imaging-1.1.7, я получаю:

--------------------------------------------------------------------
PIL 1.1.7 TEST SUMMARY 
--------------------------------------------------------------------
Python modules loaded from ./PIL
Binary modules loaded from ./PIL
--------------------------------------------------------------------
--- PIL CORE support ok
--- TKINTER support ok
--- JPEG support ok
--- ZLIB (PNG/ZIP) support ok
--- FREETYPE2 support ok
--- LITTLECMS support ok
--------------------------------------------------------------------
Running selftest:
--- 57 tests passed.

Однако при рендеринге моего первого изображения PIL в моем собственном коде я все равно получаю:

File "/Library/Python/2.6/site-packages/PIL/Image.py", line 1290, in resize self.load()
File "/Library/Python/2.6/site-packages/PIL/ImageFile.py", line 215, in load raise_ioerror(e)
File "/Library/Python/2.6/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

Я немного растерялся, что бы попробовать дальше. Есть идеи? Код, который вызывает этот сбой, выглядит следующим образом:

try:
    self.img = self.img.resize((self.screenwidth, self.screenheight), 
            Image.ANTIALIAS)
    except IOError, e:
        print "Error resizing: " + str(e)
        self.img = self.img.resize((self.screenwidth, self.screenheight))
        raise 

Ответы [ 3 ]

2 голосов
/ 22 октября 2011

Вы должны рассмотреть возможность удаления PIL и следования инструкциям на этом сайте - http://jetfar.com/libjpeg-and-python-imaging-pil-on-snow-leopard/

В частности, кажется, что вы хотите убедиться, что libjpeg имеет версию 6b , а не 8c (см. Ниже)


Я могу воспроизвести это на Mac OS X 10.5, используя macports

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

Ответ там указывает, что ошибка может иметь какое-то отношение к libjpeg

Насколько я могу судить, ошибка вызвана несовместимостью с libjpeg v8c.

Я не могу точно определить, что является причиной этого; все, что я могу сказать, это то, что на множестве других систем, которые я использую, которые не демонстрируют эту ошибку поведения (OS X 10.5 с fink, Redhat 5.2, Ubuntu 11.10 и 10.10), они все используют libjpeg 6b. Только macports использует 8c, а macports - единственная система, в которой я получаю эту ошибку.

1 голос
/ 25 октября 2011

Мне удалось использовать PIL с помощью менеджера пакетов домашнего пивоварения .

0 голосов
/ 17 мая 2017

У меня похожая ошибка при чтении файла .jpg с современной средой Python и Sierra Mac OS.Я нашел быстрый обходной путь, который заключается в преобразовании всех файлов .jpg в файлы .png. Надеемся, что это может помочь кому-то еще.

...