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

9 投票
3 回答
8110 浏览
提问于 2025-04-17 03:39

我在使用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的命令行中尝试编写代码,但当我调用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 个回答

1

使用 Pillow,如果遇到问题,可以去 报告问题,Pillow团队会帮你解决。顺便提一句,如果你在报告问题的时候能提交一个代码修改的请求,那就更好了。此外,还可以查看: https://stackoverflow.com/a/7770547/185820

2

我也遇到过同样的问题,不过我们当时用的是RHEL系统,它只支持libjpeg 6b。

深入研究这个问题后发现,这个错误通常发生在你使用的libjpeg版本不支持某些JPEG功能的时候。在我的情况下,问题出在算术编码上(这个功能是在第7版中引入的)。

我发现维基百科关于libjpeg的页面对我了解不同版本能打开哪些类型的JPEG文件很有帮助。所以……

总结一下

如果可以的话,升级libjpeg,或者把你的图片重新保存为基线JPEG格式。

5
sudo apt-get install libjpeg8-dev

重新构建PIL库,然后再安装一次。

撰写回答