4 Stimmen

"ERROR: unterbrochener Datenstrom beim Lesen einer Bilddatei" (TrueType-Schriften libjpeg und PIL unter OS X)

Ich verwende OS X 10.6.7, Python 2.6 und schreibe eine kleine wxPython-Anwendung, die PIL verwendet, um ein Bild zu manipulieren und einen Text hinzuzufügen.

Nach einigen Konfigurationsschwierigkeiten beim Versuch, PIL mit libjpeg und PIL zum Laufen zu bringen, folgte ich den Anweisungen unter diese Seite .

Bei der Ausführung python setup.py build_ext -i (innerhalb des Ordners Imaging-1.1.7) erhalte ich:

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

Darüber hinaus ist die Ausführung python selftest.py im Installationsordner von Imaging-1.1.7 erhalte ich:

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

Wenn ich jedoch mein erstes PIL-Bild in meinem eigenen Code rendere, erhalte ich immer noch eine Meldung:

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

Ich bin etwas ratlos, was ich als Nächstes versuchen soll. Irgendwelche Ideen? Der Code, der diesen Absturz verursacht, scheint zu sein:

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

2voto

Matt W-D Punkte 1555

Sie sollten erwägen, PIL zu deinstallieren und die Anweisungen auf dieser Website zu befolgen. http://jetfar.com/libjpeg-and-python-imaging-pil-on-snow-leopard/

Insbesondere scheint es, dass Sie sicherstellen wollen, dass libjpeg die Version 6b , nicht 8c (siehe unten)


Ich kann dieses Problem unter Mac OS X 10.5 mit macports reproduzieren

Dies steht im Zusammenhang mit einer anderen Frage: Wie löst man IOError:broken data stream beim Lesen einer Bilddatei?

Die Antwort dort deutet darauf hin, dass der Fehler etwas mit libjpeg zu tun haben könnte

Soweit ich das beurteilen kann, scheint der Fehler durch eine Vorwärtsinkompatibilität mit libjpeg v8c verursacht zu werden.

Ich kann nicht feststellen, was dies genau verursacht; alles, was ich sagen kann, ist, dass auf einer Vielzahl von anderen Systemen, die ich benutze, die nicht dieses Verhalten Fehler (OS X 10.5 mit fink, Redhat 5.2, Ubuntu 11.10 und 10.10), sie alle libjpeg 6b verwenden. Nur macports verwendet 8c, und macports ist das einzige System, wo ich diesen Fehler bekomme.

1voto

Nathan Farrington Punkte 1860

Ich konnte PIL mit dem Homebrew-Paketmanager .

0voto

Claude COULOMBE Punkte 2958

Ich habe einen ähnlichen Fehler beim Lesen von .jpg-Dateien mit einer aktuellen Python-Umgebung und Sierra Mac OS. Ich habe eine schnelle Abhilfe gefunden, die darin besteht, alle .jpg-Dateien in .png-Dateien zu konvertieren, in der Hoffnung, dass jemand anderes helfen kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X