如何解决读取图像文件时出现的IOError:broken data stream错误?

9

我正在使用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。


1
你确定这个图像文件是正确的吗?在另一个程序中能够查看它并不一定足够。你能否使用其他图像而没有错误? - wberry
是的,这个图像文件是正确的。png格式可以正常工作,但jpeg格式不行。顺便说一下,我正在使用libjpeg8b。 - Joseph Lafuente
3个回答

5
sudo apt-get install libjpeg8-dev

重新构建PIL并重新安装。

2
我也遇到了同样的问题,但不幸的是我们使用的是仅有libjpeg 6b的RHEL。
进一步研究发现,当您使用版本中不支持的JPEG功能时,会出现此错误。在我的情况下,这是算术编码(在版本7中引入)。
我发现libjpeg的维基百科页面对确定哪些类型的JPEG文件可以由哪些版本打开非常有帮助。
简而言之,请升级libjpeg或将图像重新保存为基准JPEG。

1

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