Python图像库出现“解码器JPEG不可用”错误 - PIL

305 投票
15 回答
159385 浏览
提问于 2025-04-17 10:32

我的系统支持JPEG格式的图片。

每当我上传图片时,我的代码就会出错,错误信息是:

File "PIL/Image.py", line 375, in _getdecoder
    raise IOError("decoder %s not available" % decoder_name)
IOError: decoder jpeg not available

我该怎么解决这个问题呢?

15 个回答

29

这是我唯一成功的方法。安装其他包和重新安装PIL都没用。

在Ubuntu系统上,先安装需要的包:

sudo apt-get install libjpeg-dev

(你可能还想安装 libfreetype6 libfreetype6-dev zlib1g-dev,这样可以启用其他解码器)。

然后把PIL替换成pillow:

pip uninstall PIL
pip install pillow
64

对于使用OSX的朋友们,我使用了以下的二进制文件来全局安装libpng和libjpeg:

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
493

要用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)。

撰写回答