OSError:Windows上不可用的jpeg解码器
我正在开发一个Django项目,最近遇到了一个麻烦的问题。我在我的Windows电脑上安装了Pillow库,但在尝试在Django模板中显示图片时,意外地出现了一个OSError错误。
OSError: 解码器jpeg不可用
我该怎么解决这个问题呢?
我一提交这个问题就被投了反对票,所以我觉得有必要提一下以下几点(我也有我的面子!):
- 这是一个问答(自问自答)。
- 我会在答案中详细说明。
- 这最初是一个博客文章,我花了好几个小时写的!这是我的贡献,不是我偷来的别人的。
- 来源: http://blog.danic.net/oserror-decoder-jpeg-not-available/
1 个回答
简短说明
这是因为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