如何解决IOError:读取图像文件时数据流损坏?

时间:2011-10-04 18:15:03

标签: python django python-imaging-library libjpeg

我在Ubuntu 11.04下工作。我正在尝试在我的Django项目中使用PIL。可悲的是,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 shell中编码,当我调用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

我也在虚拟环境中工作,我在Django项目上上传jpeg图像时遇到问题。 PNG工作正常,但它拒绝JPEG

3 个答案:

答案 0 :(得分:5)

sudo apt-get install libjpeg8-dev

重建PIL并重新安装。

答案 1 :(得分:2)

我遇到了同样的问题,但不幸的是我们使用的RHEL只有libjpeg 6b。

进一步深入研究此问题,当您使用的是您正在使用的libjpeg版本不支持的JPEG功能时,似乎会出现此错误。在我的例子中,它是算术编码(在版本7中引入)。

我发现wikipedia page on libjpeg有助于确定哪些类型的JPEG文件可以通过哪些版本打开。所以...

TL; DR

如果可以升级libjpeg或将图像重新保存为基线JPEG。

答案 2 :(得分:1)

使用Pillowreport issues,Pillow团队会解决这些问题。提交拉取请求以及问题报告的加分点。另请参阅:https://stackoverflow.com/a/7770547/185820