首页 > 代码库 > 【Python笔记】图片处理库PIL的源码安装步骤

【Python笔记】图片处理库PIL的源码安装步骤

前段时间项目需要对某些图片打水印,用到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 1
1.2 install-lib
以-fPIC参数编译完jpeg源码后,执行如下命令:
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文档

【Python笔记】图片处理库PIL的源码安装步骤