调整图像大小时出现JPEG解码错误

3
我已经编写了以下代码来从目录中读取jpeg文件并调整其大小。
for dirs, path, files in os.walk("wallet_training/"):
    for filename in files:
            I=Image.open(os.path.join("wallet_training",filename))
            I=I.resize((256,256), Image.ANTIALIAS)
            print I

然而它会抛出以下错误:
File "test.py", line 31, in <module>
I=I.resize((256,256), Image.ANTIALIAS)
File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 1290, in resize
self.load()
File "/usr/local/lib/python2.7/dist-packages/PIL/ImageFile.py", line 189, in load
d = Image._getdecoder(self.mode, d, a, self.decoderconfig)
File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 385, in _getdecoder
raise 
IOError("decoder %s not available" % decoder_name)

如果不使用调整大小的功能,代码似乎可以正常工作。

提前感谢您。

附言:我检查了另一个问题,我已经安装了libjpeg-dev,但它仍然无法工作。


你好像缺少了PIL库。你使用的是什么操作系统?请尝试运行pip install -I PIL安装。 - user1467267
他没有丢失PIL库;他只是缺少PIL库中的JPEG支持。 - abarnert
你使用的是哪个版本的PIL/Pillow?如果你还在使用PIL,有没有任何理由不切换到Pillow?如果你正在安装二进制文件,可以尝试通过pip安装吗?你使用的平台/发行版/版本是什么,以及你是如何安装libjpeg-dev的?你确定位宽匹配(例如,32位的libjpeg-dev对于64位的Python和PIL是无用的)? - abarnert
@Allendar 我已经安装了PIL。 :) abarnert 是的,我使用pip安装了二进制文件,我正在使用64位的ubuntu 13.10,并安装了64位的软件包。我从PIL切换到pillow,它可以工作了。对不起打扰你们了。 - m_amber
1个回答

3
如果您想诊断 PIL 在构建时为什么无法找到 libjpeg 并正确使用它,我们可以...
但是,PIL 实际上是一个已经停止维护的项目,并且在 4 年前不存在的系统上(如 64 位 Ubuntu 13.10)配置存在许多问题。 它还无法很好地与现代的 setuptools/pip 协同工作,并且几乎没有关于构建过程的文档。 最后一个版本(1.1.6)也未分发给 PyPI。 Pillow 是“PIL 的现代分支”,它从 PIL 1.1.6 开始,修复了它以正确地使用 setuptools,使其在每个主要操作系统上都能正常工作,将其移植到 Python 3.x,并修复了各种错误。
因此,除非您真的需要 PIL 1.1.5 或 1.1.6,否则请改用 Pillow。 这应该就像这样简单:
$ pip uninstall PIL
$ pip install pillow

除非您通过二进制轮安装,否则该安装命令的输出应该会给您提供一个漂亮的表格,其中列出了编译和未编译的功能...但如果您有发行版的标准libjpeglibjpeg-dev包,我敢打赌它会被找到。

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