Python图像库失败,消息"解码器JPEG不可用" - PIL

Rav*_*avi 304 python jpeg python-imaging-library pillow

PIL在我的系统中支持JPEG.

每当我上传时,我的代码都失败了:

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

我该如何解决这个问题?

Rol*_*olo 487

的libjpeg-dev的需要能够处理与枕头(或PIL)JPEG文件,所以你需要安装它,然后重新编译枕头.似乎在Ubuntu 14.04上需要libjpeg8-dev

如果您仍在使用PIL,那么您最近应该使用枕头,所以首先pip uninstall PIL按照这些说明进行切换,或者如果您有充分的理由坚持使用PIL,请将"枕头"更换为下面的"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
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,请尝试以下其中一项,具体取决于您使用的是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
Run Code Online (Sandbox Code Playgroud)

或者对于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/
Run Code Online (Sandbox Code Playgroud)

然后重新安装枕头:

pip install --no-cache-dir -I pillow
Run Code Online (Sandbox Code Playgroud)

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

  • 最新版本的pip必须缓存下载的包及其编译.当然,第一次"pip install"事情是非常冗长的,但随后的卸载和(重新)安装非常快.*无论如何*,上面的方法对我来说不起作用,直到我运行`pip install --no-cache-dir pillow`.祝好运! (5认同)
  • 为了记录,这只适用于x86_64,我必须运行:sudo ln -s /usr/lib/i386-linux-gnu/libz.so/usr/lib /; sudo ln -s /usr/lib/i386-linux-gnu/libfreetype.so.6/usr/lib /; sudo ln -s /usr/lib/i386-linux-gnu/libjpeg.so/usr/lib / (2认同)
  • 对于那些刚刚开始使用PIL的人来说,应该注意到它已经过时而且不再维护了.如果要在项目中使用图像,请使用更新并保持fork或PIL的PILLOW. (2认同)

zea*_*soi 63

对于OSX上的那些人,我使用以下二进制文件来获得系统安装的libpng和libjpeg:

用于OSX的libpng和libjpeg

因为我已经安装了PIL(通过virtualenv上的pip),我跑了:

pip uninstall PIL
pip install PIL --upgrade
Run Code Online (Sandbox Code Playgroud)

这解决了decoder JPEG not available我的错误.

更新(2014年4月24日):

较新版本的pip需要额外的标志才能从外部源下载库(包括PIL).请尝试以下方法:

pip install PIL --allow-external PIL --allow-unverified PIL
Run Code Online (Sandbox Code Playgroud)

有关其他信息,请参阅以下答案:pip install PIL不要安装到virtualenv中

更新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
Run Code Online (Sandbox Code Playgroud)


Den*_*zov 29

这是对我有用的唯一方法.安装包并重新安装PIL不起作用.

在ubuntu上,安装所需的包:

sudo apt-get install libjpeg-dev
Run Code Online (Sandbox Code Playgroud)

(您可能还希望安装libfreetype6 libfreetype6-dev zlib1g-dev以启用其他解码器).

然后用枕头替换PIL:

pip uninstall PIL
pip install pillow
Run Code Online (Sandbox Code Playgroud)


小智 21

以下是关于ubuntu 12.04的工作:

pip uninstall PIL
apt-get install libjpeg-dev
apt-get install libfreetype6-dev
apt-get install zlib1g-dev
apt-get install libpng12-dev
pip install PIL --upgrade
Run Code Online (Sandbox Code Playgroud)

当你看到" - JPEG支持avaliable",这意味着它的工作原理.

但是,如果在编辑jpeg图像时仍然无效,请检查python路径!我的python路径错过了/usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/,所以我编辑~/.bashrc将以下代码添加到此文件中:

编辑: export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/

最后,它的确有效!


Ben*_*ngt 16

在Fedora 17上我必须安装libjpeg-devel并在之后重新安装PIL:

sudo yum install --assumeyes libjpeg-devel
sudo pip-python install --upgrade PIL
Run Code Online (Sandbox Code Playgroud)


dav*_*ode 14

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

pip install -I --no-cache-dir -v Pillow
Run Code Online (Sandbox Code Playgroud)

您可以通过阅读日志来查看枕头是否已正确配置:

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
    --------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

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


moo*_*goo 12

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

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

brew安装libjpeg

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

pip install -I枕头

  • 这可能是由于我安装brew的一个单独问题,但我必须在安装Pillow之前`brew unlink jpeg && brew link jpeg`. (2认同)

小智 11

apt-get install libjpeg-dev
apt-get install libfreetype6-dev
apt-get install zlib1g-dev
apt-get install libpng12-dev
Run Code Online (Sandbox Code Playgroud)

安装这些并确保使用pip安装PIL因为我从源代码编译它,并且由于某种原因它不起作用


Dim*_*ris 9

我已经使用Pillow并得到了同样的错误.尝试安装libjpeglibjpeg-dev按照其他人的建议,但被告知已经安装了(较新的)版本.

最后所需要的只是重新安装Pillow:

sudo pip uninstall Pillow
sudo pip install Pillow
Run Code Online (Sandbox Code Playgroud)