4

我正在運行OS X 10.6.7,Python 2.6,並編寫使用PIL處理圖像的小型wxPython應用程序並添加一些文本。「錯誤:讀取圖像文件時數據流破損」(OS X上的TrueType字體libjpeg和PIL)

在嘗試使用libjpeg和PIL運行PIL之後,出現很多配置問題後,我按照this site的說明操作。

在運行python setup.py build_ext -i(從成像-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 
-------------------------------------------------------------------- 

此外,在成像-1.1.7運行python selftest.py安裝文件夾中,我得到:

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

'import _imaging'工作嗎? – tom10 2011-10-19 16:43:00

+0

不幸的是,我無法再訪問這個環境,也無法檢查。我的解決方案是將基礎環境切換到Linux .. – urbushey 2011-10-21 20:13:11

+0

嗨tom10,是進口_imaging工作正常。我可以使用python命令打開,調整大小,裁剪,使用圖像創建縮略圖,但它不適用於應用程序:( – 2011-10-22 10:17:59

回答

2

你應該考慮卸載PIL並按照本網站上的說明 - http://jetfar.com/libjpeg-and-python-imaging-pil-on-snow-leopard/

特別是,它顯示了要確保的libjpeg目前的版本爲6B,不8C(見下文)


我能夠重現此無線日的Mac OS X 10.5使用的MacPorts

這是關係到另一個問題: How to solve IOError:broken data stream when reading image file?

答案有表示該錯誤可能有一些做的libjpeg

至於我可以告訴大家,該錯誤似乎是由於libjpeg v8c與前向不兼容導致的。

我無法確定究竟是什麼原因引起的;我可以說的是,在我使用的各種其他系統上不會出現此行爲錯誤(OS X 10.5,fink,Redhat 5.2,Ubuntu 11.10和10.10),它們都使用libjpeg 6b。只有macports使用8c,而macports是唯一一個我得到這個錯誤的系統。

+1

我將在週二再次檢查這一點,不,我不能這樣做:(感謝您的建議! – 2011-10-22 21:22:32

+0

Yep .. libjpeg8c是個問題。我已經卸載它並再次安裝了6b。重新安裝PIL,它正在工作。我在某處讀到這可能是問題,但不知何故忽略了它。非常感謝你。賞金是你的:D – 2011-10-25 10:01:14

1

我能夠使用PIL和homebrew package manager

+0

感謝您的信息,但我沒有使用Mac。我只有在這個話題中有類似的問題。 – 2011-10-25 10:02:56

0

當閱讀帶有最新Python環境和Sierra Mac OS的.jpg文件時,我遇到了類似的錯誤。我發現了一個快速的解決方法,它將所有的.jpg文件轉換爲.png文件,希望能夠幫助別人。