Python图像库出现“解码器JPEG不可用”错误 - PIL
我的系统支持JPEG格式的图片。
每当我上传图片时,我的代码就会出错,错误信息是:
File "PIL/Image.py", line 375, in _getdecoder
raise IOError("decoder %s not available" % decoder_name)
IOError: decoder jpeg not available
我该怎么解决这个问题呢?
15 个回答
这是我唯一成功的方法。安装其他包和重新安装PIL都没用。
在Ubuntu系统上,先安装需要的包:
sudo apt-get install libjpeg-dev
(你可能还想安装 libfreetype6 libfreetype6-dev zlib1g-dev
,这样可以启用其他解码器)。
然后把PIL替换成pillow:
pip uninstall PIL
pip install pillow
对于使用OSX的朋友们,我使用了以下的二进制文件来全局安装libpng和libjpeg:
因为我已经通过pip在虚拟环境中安装了PIL,所以我运行了:
pip uninstall PIL
pip install PIL --upgrade
这解决了我遇到的decoder JPEG not available
错误。
更新(2014年4月24日):
新版本的pip需要额外的参数才能从外部源下载库(包括PIL)。可以试试以下命令:
pip install PIL --allow-external PIL --allow-unverified PIL
有关更多信息,请查看以下回答:pip install PIL没有安装到虚拟环境中
更新2:
如果你使用的是OSX Mavericks,你需要设置ARCHFLAGS
标志,正如@RicardoGonzales在下面的评论中提到的:
ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install PIL --allow-external PIL --allow-unverified PIL
要用pillow(或者叫PIL)处理jpeg格式的图片,你需要安装libjpeg-dev这个东西,然后重新编译pillow。看起来在Ubuntu 14.04上还需要libjpeg8-dev。
如果你还在用PIL的话,现在其实应该换成pillow了,所以在按照下面的步骤之前,先运行一下pip uninstall PIL
来卸载它。如果你有特别的理由要继续用PIL,那就把下面的“pillow”换成“PIL”。
在Ubuntu上:
# install libjpeg-dev with apt
sudo apt-get install libjpeg-dev
# if you're on Ubuntu 14.04, also install this
sudo apt-get install libjpeg8-dev
# reinstall pillow
pip install --no-cache-dir -I pillow
如果这样还不行,可以根据你是64位还是32位的Ubuntu尝试下面的其中一个。
对于Ubuntu x64:
sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib
sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib
sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib
或者对于Ubuntu 32位:
sudo ln -s /usr/lib/i386-linux-gnu/libjpeg.so /usr/lib/
sudo ln -s /usr/lib/i386-linux-gnu/libfreetype.so.6 /usr/lib/
sudo ln -s /usr/lib/i386-linux-gnu/libz.so /usr/lib/
然后重新安装pillow:
pip install --no-cache-dir -I pillow
(根据评论的反馈进行了修改。感谢Charles Offenbacher指出32位的情况不同,感谢t-mart建议使用--no-cache-dir
)。