2

我正在尝试将 python 程序从 OS X 移植到 Windows 7。该程序使用 tkinter 处理 png,例如

self.logoImg = ImageTk.PhotoImage(Image.open('GrowthPathLogo.png'))

代码因 IOError 失败:解码器 zip 不可用

我试过用 pypm 安装 pip。然后我尝试用 pip 构建它。在构建过程结束时,它报告不支持 png/zlib

我在 Windows 上安装 python.org 时遇到同样的错误。

我被困住了,我不擅长构建 C 库。我也不知道 pip 是如何工作的。我安装了一个 gnu zlib 库,但它根本没有帮助。我已经安装了 Visual C++ 2008 Express,至少它可以正常工作,因为 pip 确实可以成功编译。

4

2 回答 2

7

在这里尝试由 Christoph Gohlke 维护的构建。要自己构建 PIL,您需要 README 中提到的几个库:libjpeg、zlib、freetype2 和 littleCMS。阅读 zlib125-dll.zip 中的USAGE.txt以获取有关使用 Visual C++ 或 MinGW 链接到 zlib 的说明。

于 2011-10-01T04:20:31.110 回答
5

我知道这是一个老问题,但我想给出我的答案,以防人们遇到和我一样的问题。

Christoph Gohlke 的作品在工作时非常棒。然而,对于我的带有 python 2.7 和最重要的是 64 位的 win7 机器,没有支持 PNG 的预编译二进制文件(zlib 支持)。该页面上的 Pillow 64 位二进制文​​件在 easy_install 上失败,无法安装在我的机器上。

因此,如果您想解决这个问题并且二进制文件不起作用,您需要使用 zlib 支持构建您自己的 Pillow。为此,您需要下载最新的 Pillow 源代码。在 setup.py 中修改 ZLIB_ROOT 行说:

ZLIB_ROOT = './zlib'

现在您还必须为 win64 位构建 zlib,这是棘手的部分。从他们的站点下载最新的 zlib 源代码(我在 1.2.5/1.2.8 上测试过)。打开 64 位的 Visual Studio 命令提示符(非常重要) 我的命令提示符称为 VS2012 x64 Cross Tools 命令提示符。

转到 zlib 源目录并运行:

nmake -f win32/Makefile.msc

如果它不起作用,请尝试:

nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF" OBJA="inffasx64.obj gvmat64.obj inffas8664.obj"

现在您应该在源目录中有以下文件:

zlib.h
zconf.h
zutil.h (not sure this is needed)
zlib.lib
zdll.lib

将它们复制到 Pillow 源目录中,进入一个名为“zlib”的目录 使用"python setup.py build_ext -i" Install Pillow 编译 Pillow 使用"python setup.py install"

Pillow 现在应该支持 ZLIB (png)。如果你有一些旧的 Pillow/PIL 安装,你可能需要手动将 _imaging.pyd 和 _imagingmath.pyd 复制到你的 python 或虚拟环境的包安装文件夹中,以确保你有新编译的。

您现在可以导入 _imaging 并且您有 png 支持。

如果需要,您也可以以相同的方式添加 Libjpeg,手动编译它。

希望这可以帮助遇到此问题的任何人。

于 2013-06-19T12:18:41.917 回答