OSError:Windows上不可用的jpeg解码器

4 投票
1 回答
4098 浏览
提问于 2025-04-17 23:17

我正在开发一个Django项目,最近遇到了一个麻烦的问题。我在我的Windows电脑上安装了Pillow库,但在尝试在Django模板中显示图片时,意外地出现了一个OSError错误。

OSError: 解码器jpeg不可用

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


我一提交这个问题就被投了反对票,所以我觉得有必要提一下以下几点(我也有我的面子!):

1 个回答

9

简短说明

这是因为Pillow这个包没有带上需要的库文件。这是你需要自己处理的事情。所以,JPEG格式(还有其他文件格式)的支持就不可用了。

要确认这一点,可以在安装Pillow后查看设置总结。如果你没有看到这个总结,可以简单地重新安装一下这个包,安装完成后就会显示出来。

$ sudo pip uninstall Pillow
$ sudo pip install Pillow

在总结中,我们看到我在Windows 8.1上安装了Pillow版本2.3.1。最重要的是,我们看到没有对JPEG和PNG(ZLIB)图像文件的支持。

--------------------------------------------------------------------
PIL SETUP SUMMARY
--------------------------------------------------------------------
version      Pillow 2.3.1
platform     win32 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:24:06
             [MSC v.1600 32 bit (Intel)]
--------------------------------------------------------------------
*** TKINTER support not available
(Tcl/Tk 8.6 libraries needed)
*** JPEG support not available
*** ZLIB (PNG/ZIP) support not available
*** LIBTIFF support not available
*** FREETYPE2 support not available
*** LITTLECMS2 support not available
*** WEBP support not available
*** WEBPMUX support not available
--------------------------------------------------------------------
To add a missing option, make sure you have the required
library, and set the corresponding ROOT variable in the
setup.py script.

To check the build, run the selftest.py script.

明确的解决方案

在Linux上,只需安装libjpeg-dev包,然后重新安装Pillow库。

但因为我们在使用Windows,所以需要稍微复杂一点:我们需要下载jpeg库的源代码,以提供头文件并自己构建库文件。还需要进行一些复制和粘贴。

你需要安装Visual C++ 2010 Express。反正你需要它来构建Pillow,否则会出现错误:找不到vcvarsall.bat

然后从独立JPEG组下载jpeg库包,并将其解压到一个临时位置。

复制头文件

在jpeg包中查找三个名为

  • jpeglib.h
  • jmorecfg.h
  • jconfig.h(编辑:需要创建,见评论)

的文件,并将它们复制到你的Python安装目录中的include文件夹(可能是"C:\Python34\include\"

构建库文件

为了完成接下来的步骤,运行vcvarsall.bat。这会将所有必要的目录添加到你的PATH变量中。默认情况下,你可以在"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"找到这个文件。

现在打开命令行,找到你之前解压jpeg库源代码的目录。执行以下两个命令:

> nmake /f makefile.vc setup-v10
> msbuild jpeg.sln

第二个命令会构建所需的文件,并将它们放在新创建的子目录\Release\中。

清理并重新构建带有JPEG支持的Pillow

太好了,现在我们只需要将新构建的Release\jpeg.lib复制到我们的Python-libs目录中(可能是"C:\Python34\libs\")。 注意:是"libs",不是"Lib"。

再一次,安装Pillow包,并注意设置总结。现在JPEG支持已经可用了。

--- JPEG support available

撰写回答