在Windows上无法使用jpeg解码器。

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

OSError: decoder jpeg not available

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


我提交后就被踩了。因此我觉得需要提一下以下内容(我很自豪!):


是的,这是我的博客文章。大部分都是逐字逐句的。 - Daniel
1
+1 我不知道谁没有解释就给它打了-1。可能是因为这是一个无耻的广告插入。鼓励你回答自己的问题。Python在Windows生态系统中需要像这样的帖子,以帮助消除障碍。 - Chris Wesseling
1
可以像这样链接到自己的作品,这是可以接受的。(http://meta.stackexchange.com/a/20532/171231)这不是广告,答案也不仅仅是一个链接。(http://meta.stackexchange.com/a/8259/171231) - Chris Wesseling
1
有人对这个问题发起了关闭投票,理由是“不清楚你在问什么”。如果我有猜测的倾向,我会猜测这个负评(即使不是来自下评者)是因为这个问题,而不是任何关于作者身份的问题。(但作者身份仍然应该清晰。我建议将其移动到答案中。)虽然我不同意关闭投票,但我可以理解他们的观点。我们得到了很多由小描述+错误信息组成的问题,这导致了大量基于假设的答案。 - Louis
1
有一件事可以帮助问题更好地展示,就是把答案的开头移动到问题中,比如说(这里是转述):“我已经尝试重新安装,并注意到摘要显示……jpeg未安装。我该怎么解决这个问题?” 这样,那些正在搜索此错误信息的人仍然可以找到这个问题,而那些刚刚偶然发现它的人很可能不会对问题的内容有任何问题,因为问题已经被缩小到了相当具体的内容上。 - Louis
显示剩余5条评论
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

+1,我对解决方案的正确性一无所知(Python在*nix上是我的强项)。但你花时间标记你的博客文章并在一个更容易被人们发现的网站上分享它。做得好。一旦遇到这个问题的人搜索它,你会得到更多的认可。 - Chris Wesseling
1
啊,必须创建这个文件:https://www.falconview.org/svn/Sandbox/mapnik/libjpeg-8a/install.txt - duhaime
1
@duhaime,感谢你的贡献。我进行了相应的编辑。 - Daniel
1
@twobob,很抱歉我得说这真的让我想起了一些东西,而且我现在没有Windows机器可用。我记得pip install pillow会安装PIL并处理更多的依赖关系,但我不知道它是否会带上这个依赖项。对不起! - duhaime
1
@twobob,我认为你关于外部链接的看法是正确的。你想发表一个答案,并附上这些笔记,以便帮助其他人吗?无论如何,我希望你能顺利进行! - duhaime
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接