前段时间项目需要对某些图片打水印,用到Python的PIL库,本文以Imaging-1.1.7为例,记录PIL库的源码编译/安装步骤。
PIL全称Python Image Library,它支持多种图片格式的处理,能为我们的应用程序代理强大的图像处理能力,如裁剪、旋转、打水印等。
从官网下载v1.1.7版本源码并解压后,cd至解压目录,读README可知,若想在应用中处理jpeg图片,需要预先安装jpeg库,否则使用时会报错。
1. 编译安装jpeg库
1.1 编译源码
从jpeg库官网下载stable版本的jpeg源码(最新稳定版为v9a),解压源码的gz包,cd至解压目录,vi打开Makefile文件,修改2处:
1) 将prefix变量设置为jpeg库的安装目标路径
2) 在CFLAGS设置中追加-fPIC参数(关于PIC的作用,可通过man gcc了解或参见这里)
注意:由于后面安装Imaging时,需要编译出一个_Imaging.so库文件,故这里必须设置-fPIC参数,否则Imaging编译时会报如下错误(想验证的话,可以试一试 -_-):
/usr/bin/ld: /home/slvher/python-2.7.5/3rd-lib-src/jpeg-6b/lib/libjpeg.a(jcparam.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC /home/slvher/python-2.7.5/3rd-lib-src/jpeg-6b/lib/libjpeg.a: could not read symbols: Bad value collect2: ld returned 1 exit status error: command 'gcc' failed with exit status 11.2 install-lib
make install make install-lib以上命令将编译好的jpeg库"安装"至由prefix指定的路径下(其实就是从源码目录cp文件至prefix目录)
2. 安装Imaging库
cd至Imaging-1.1.7,vi打开setup.py,修改文件:
1) 注释掉JPEG_ROOT = None
2) 增加JPEG_ROOT = libinclude("/home/slvher/python-2.7.5/3rd-lib-src/jpeg-6b"),保存退出并执行如下命令:
python setup.py build_ext -i
正常情况下,Imaging库编译会成功
然后执行如下命令即可将PIL库安装到python的site-packages目录下:
python setup.py install
此后,应用程序就可以正常使用GIL库了
【参考资料】
1.
PIL官网
2. PIL源码README文档
原文地址:http://blog.csdn.net/slvher/article/details/38757411