"ERROR: 读取图像文件时数据流损坏" (在OS X上使用TrueType字体、libjpeg和PIL)

4

我正在使用OS X 10.6.7、Python 2.6运行一款小型的wxPython应用程序,它使用PIL来处理图像并添加一些文本。

在尝试让PIL与libjpeg和PIL一起运行时出现了一些配置问题后,我遵循了这个网站上的说明。

当我从Imaging-1.1.7文件夹内运行python setup.py build_ext -i命令时,我收到以下消息:

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

此外,在Imaging-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 

很遗憾,我不再能够访问这个环境并进行检查。我的解决方案是将基础环境切换到Linux。 - urbushey
嗨 tom10,是的,import _imaging 可以正常工作。我可以使用Python命令打开、调整大小、裁剪、创建缩略图等操作图像,但在应用程序中无法工作:( - Marek Tuchalski
3个回答

2
你应该考虑卸载PIL并按照此网站上的说明操作 - http://jetfar.com/libjpeg-and-python-imaging-pil-on-snow-leopard/ 特别是,您需要确保libjpeg的版本为6b,而不是8c(请参见下文)。
我使用macports可以重现这个问题。
这与另一个问题有关: 如何解决读取图像文件时IOError:broken数据流? 那里的答案表明,该错误可能与libjpeg有关。
据我所知,该错误似乎是由于与libjpeg v8c的向前不兼容性引起的。
我无法确定具体原因是什么;我只能说,在我使用的其他许多没有出现此错误的系统上(带fink的OS X 10.5、Redhat 5.2、Ubuntu 11.10和10.10),它们都使用libjpeg 6b。只有macports使用8c,并且macports是唯一一个出现此错误的系统。

1
我会在周二再次检查,但是我不能做这个 :( 谢谢建议! - Marek Tuchalski
没错...libjpeg8c是问题所在。我已经卸载了它并重新安装了6b版本。重新安装了PIL,现在它可以正常工作了。我在某个地方读到过这可能是问题所在,但不知怎么的忽略了它。非常感谢你。赏金归你啦 :D - Marek Tuchalski

1

谢谢提供信息,但我没有使用Mac。我只是遇到了类似于这个主题的问题。 - Marek Tuchalski

0

在使用最新的Python环境和Sierra Mac OS读取.jpg文件时,我遇到了类似的错误。我找到了一个快速解决方法,即将所有的.jpg文件转换为.png文件。希望这能帮助其他人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接