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

时间:2014-01-24 20:57:53

标签: python image jpeg

我编写了以下代码来从目录中读取jpegs然后调整它们的大小。

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)

在没有调整大小功能的情况下使用时,代码似乎正常工作。 提前谢谢。

P.S。我检查了另一个问题,我安装了libjpeg-dev,但仍无法正常工作

1 个答案:

答案 0 :(得分: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

除非您通过二进制轮安装,否则该安装命令的输出应该为您提供一个很好的表,其中列出了哪些功能并且未编译...但是如果您有发行版的标准libjpeg和{{1}包裹,我愿意打赌它会被发现。