PIL在我的系统中支持JPEG。

每当我做一个上传,我的代码失败:

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

我该如何解决这个问题?


当前回答

这个问题是很久以前发布的,大多数答案也很老了。所以当我花了几个小时试图弄清楚这个问题时,什么都没用,我尝试了这篇文章中的所有建议。

当我试图在我的Django头像表单中上传JPG时,我仍然会得到标准的JPEG错误:

raise IOError("decoder %s not available" % decoder_name)
OSError: decoder jpeg not available

然后我检查了Ubuntu 12.04的存储库,注意到一些额外的libjpeg包。我安装了这些,问题就解决了:

sudo apt-get install libjpeg62 libjpeg62-dev

安装这些程序将删除libjpeg-dev、libjpeg-turbo8-dev和libjpeg8-dev。

希望这对2015年及以后的人们有所帮助!

干杯

其他回答

对于那些使用Mac OS Mountain Lion的人,我使用zeantsoi的答案,但它不起作用。

我最终得到了这篇文章的解决方案:http://appelfreelance.com/2010/06/libjpeg-pil-snow-leopard-python2-6-_jpeg_resync_to_restart/

现在,我很高兴地运行我的jpeg脚本!

libjpeg-dev需要能够使用pillow(或PIL)处理jpeg,因此您需要安装它,然后重新编译pillow。在Ubuntu 14.04上似乎也需要libjpeg8-dev

如果你仍然在使用PIL,那么你现在应该使用pillow,所以在按照这些说明切换之前,首先卸载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

如果这不起作用,试试下面的一个,这取决于你的Ubuntu是64位还是32位。

对于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 32bit:

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/

然后重新安装枕头:

pip install --no-cache-dir -I pillow

(编辑以包括来自评论的反馈。感谢Charles Offenbacher指出这与32位不同,以及t-mart建议使用——no-cache-dir)。

Rolo的回答非常棒,但是我不得不通过绕过pip缓存(pip 7引入)重新安装Pillow,否则它将无法正确地重新编译!! 命令如下:

pip install -I --no-cache-dir -v Pillow

通过阅读日志,您可以查看Pillow是否已正确配置:

PIL SETUP SUMMARY
    --------------------------------------------------------------------
    version      Pillow 2.8.2
    platform     linux 3.4.3 (default, May 25 2015, 15:44:26)
                 [GCC 4.8.2]
    --------------------------------------------------------------------
    *** TKINTER support not available
    --- JPEG support available
    *** OPENJPEG (JPEG2000) support not available
    --- ZLIB (PNG/ZIP) support available
    --- LIBTIFF support available
    --- FREETYPE2 support available
    *** LITTLECMS2 support not available
    *** WEBP support not available
    *** WEBPMUX support not available
    --------------------------------------------------------------------

正如你所看到的,对jpg, tiff等的支持是启用的,因为我之前通过apt (libjpeg-dev libpng12-dev libfreetype6-dev libtiff-dev)安装了所需的库

这个问题是很久以前发布的,大多数答案也很老了。所以当我花了几个小时试图弄清楚这个问题时,什么都没用,我尝试了这篇文章中的所有建议。

当我试图在我的Django头像表单中上传JPG时,我仍然会得到标准的JPEG错误:

raise IOError("decoder %s not available" % decoder_name)
OSError: decoder jpeg not available

然后我检查了Ubuntu 12.04的存储库,注意到一些额外的libjpeg包。我安装了这些,问题就解决了:

sudo apt-get install libjpeg62 libjpeg62-dev

安装这些程序将删除libjpeg-dev、libjpeg-turbo8-dev和libjpeg8-dev。

希望这对2015年及以后的人们有所帮助!

干杯

在Mac OS X Mavericks(10.9.3)上,我通过以下方法解决了这个问题:

通过brew安装libjpeg(包管理系统)

编译libjpeg

重新安装枕头(我用枕头代替PIL)

pip安装-I枕