Python Version:2.7.6
PIL Version:1.1.7
Zlib Version: 1.2.8
PIL库在编译前可通过Setup.py为其添加一些额外特性,以支持更多的功能。
1.17版中支持的特性有5种,分别是zlib、tcl、jpeg、freetype、lcms。
下面以为PIL添加zlib支持为例说明具体的添加步骤。
1、在Setup.py中有个定义在文件首部的变量:ZLIB_ROOT,其指向zlib库的zlib.lib库文件跟.h文件的目录。
ZLIB_ROOT默认值为None,也就是说PIL默认是没有zlib支持的。
2、为了得到zlib库文件和头文件,需要编译zlib库,以下编译步骤适用于在32位机器上使用VS2008编译Zlib-1.2.8。
2.1、下载Zlib源码,解压至一目录,例如:E:\zlib-1.2.8。2.2、运行E:\zlib-1.2.8\contrib\masmx86\bld_ml32.bat,编译下面步骤需要用到的一些.obj。
2.3、使用VS2008打开E:\zlib-1.2.8\contrib\vstudio\vc9下的VS解决方案文件zlibvc.sln。2.4、将当前解决翻案的编译配置修改为Relase。
2.5、右键zlibstat工程,打开属性页,在配置属性->C/C++->预处理器->预处理器定义中去掉ZLIB_WINAPI。这么做的原因是ZLIB_WINAPI宏定义了Zlib库使用WINAPI来封装所有的接口,这将导致链接生成PIL库时无法链接zlibstat.lib,出现找不到函数的错误。2.6、右键解决方案,重新生成解决方案。
2.7、在E:\zlib-1.2.8\contrib\vstudio\vc9\x86\ZlibStatRelease目录中找到上步生成的Zlib静态库文件zlibstat.lib,改名成zlib.lib后复制到E:\zlib-1.2.8,此目录下包含了Zlib的所有头文件。
3、打开PIL源码目录下的setup.py,修改其中的ZLIB_ROOT变量值,令其指向zlib库文件与头文件的位置,例如:
ZLIB_ROOT = 'E:\\zlib-1.2.8。'
4、在PIL源码目录下运行python setup.py build --force编译PIL。后面的--force选项表示强制编译,覆盖之前的编译结果。
5、运行python setup.py install --force进行安装。
6、使用如下代码测试由Zlib支持的PIL:
import Image
im = Image.open('test.png')
im.show()
如果没有出现异常:“IOError: decoder zip not available”,则表明Zlib特性添加成功。