【问题标题】:pil png activestate on windows 7 ZLIB (PNG/ZIP) support not availablepil png activestate on windows 7 ZLIB (PNG/ZIP) 支持不可用
【发布时间】:2011-09-30 23:17:33
【问题描述】:

我正在尝试将 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 确实可以成功编译。

【问题讨论】:

    标签: python windows python-imaging-library activestate activepython


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我使用了你提到的二进制构建,它现在可以工作了。
    • 那个二进制构建也正是我所需要的。谢谢!
    【解决方案2】:

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

    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" 编译 Pillow 使用"python setup.py install"安装枕头

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

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

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

    希望这对遇到此问题的人有所帮助。

    【讨论】:

    • 感谢您的努力!解决问题的唯一有用答案。
    猜你喜欢
    • 2014-09-07
    • 1970-01-01
    • 2015-02-20
    • 2015-09-24
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    相关资源
    最近更新 更多