Linux中使用PIL生成验证码
因为最近在用django写网页,就想到写一个生成验证码的程序,因为django是用python的,所以很自然的就想到了用PIL,网上一Google就发现,哇果然好多源码,很高兴下载了一个,以为可以很快搞定,但是理想很丰满,现实却很骨感。Too young too naive!
naive实现
大家很容易就想到了怎么搞了,copy网上源码,由于要使用到PIL,所以pip一下就行了,以为2步可以搞定,嗯!
pip install PIL
python src.py
以为这样就搞定的,那你真是想多了。。。 首先第一步就行不通 执行上面命令,你就会发现 Could not find any downloads that satisfy the requirement PIL 哈哈恭喜你,还是老老实实从源码安装吧。
PIL安装
pip uninstall PIL
pip uninstall pillow
wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz
tar -zxf Imaging-1.1.7.tar.gz
好到此为止源码下载完成,先别记着安装,因为需要装依赖,分别是jpeglib
和freetype-devel
- 先安装
freetype-devel
(因为比较好安装, 你的环境可能已经有),使用yum install freetype-devel
接下来安装jpeg库
wget http://www.ijg.org/files/jpegsrc.v7.tar.gz
tar -zxvf jpegsrc.v7.tar.gz
cd jpeg-7
CC="gcc -arch x86_64"
./configure --enable-shared --enable-static
make
make install
ok,目前在生成验证码的路上你已经走了一般的路。
修改Imaging-1.1.7目录下的setup.py文件找到JPEGROOT 和 FREETYPEROOT
JPEG_ROOT = libinclude("/usr/local") FREETYPE_ROOT = '/usr/lib64','/usr/include/freetype2/freetype'
将
/usr/local/lib
加入到你的动态链接库echo 'usr/local/lib' >> /etc/ld.so.conf
ldconfig
最后在Imaging-1.4.7文件中使用
python setup.py build_ext -i
查看支持项(在最末尾),注意留意--- FREETYPE2 support available
有没有支持。然后进行最畅快人心的python setup.py install
ok,恭喜你,此时你的PIL库算是安装成功了!!!
python src.py
下面给大家附上生成验证码的源码地址,拷贝自CSDN
python一下你就会发现IOError: cannot open resource
定位位置发现是里font = ImageFont.truetype(font_type, font_size)
哦哦,看一下font_type='arial.tty' 使用fc-list
看一下安装的字体,发现原来是字体没有安装,那好吧安装字体。
linux 字体安装
在这里就不再赘述字体怎么从Windows导入到linux,网上教程一大堆,不过还是个大家一个连接http://www.cnblogs.com/sqmlinux/archive/2012/08/20/2646993.html
好的,我假设你的字体安装搞定了,使用fc-list
可以查到你想要的字体了。
大功告成
好了终于可以继续python一下了。 发现还是原来的错误,what? 白搞了?
没有,从Windows弄下来的字体是大写的,并且需要制定路径,最后修改一下源码的font_type='/usr/share/fonts/win_arial/ARIAL.TTF
就好了。注意/usr/share/fonts/win_arial
请改成你字体存放路径。