今天在Python运行环境的服务器弄一个有关图像处理的程序时报这样的错:
1 | NameError: global name 'Image' is not defined |
import Image 了下,发现原来 Python 并没有自带图像处理库,需要独立安装……查了下,Python常用的图像处理库叫,可以使用 pip 安装,不错~于是在 用virtualenv 里敲入 pip install PIL。
安装很快完成,于是愉悦地刷新,等待程序的通过,结果又报错:
1 | IOError: decoder jpeg not available |
Google了下,发现通过 pip 安装的 PIL 不会安装 jpeg 的解码器……检查了下安装日志,也有这样的说明:
01 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
02 | PIL 1.1 . 7 SETUP SUMMARY |
03 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
04 | version 1.1 . 7 |
05 | platform linux2 2.7 . 5 (default, Sep 18 2013 , 09 : 53 : 07 ) |
06 | [GCC 4.1 . 2 20080704 (Red Hat 4.1 . 2 - 54 )] |
07 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
08 | * * * TKINTER support not available |
09 | * * * JPEG support not available |
10 | * * * ZLIB (PNG / ZIP ) support not available |
11 | * * * FREETYPE2 support not available |
12 | * * * LITTLECMS support not available |
13 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
14 | To add a missing option, make sure you have the required |
15 | library, and set the corresponding ROOT variable in the |
16 | setup.py script. |
JPEG support not available…… jpg都不支持,这是闹哪样……
于是只得手动安装了:
1 | wget http: / / effbot.org / downloads / Imaging - 1.1 . 7.tar .gz |
2 | tar xvfz Imaging - 1.1 . 7.tar .gz |
下载并解压成功之后,到解压目录,找到 Imaging-1.1.7/setup.py 这个文件,修改下面几行代码(默认TCL_ROOT的设置为NONE,这里要传到系统库的路径才行):
1 | TCL_ROOT = "/usr/lib64/" |
2 | JPEG_ROOT = "/usr/lib64/" |
3 | ZLIB_ROOT = "/usr/lib64/" |
4 | TIFF_ROOT = "/usr/lib64/" |
5 | FREETYPE_ROOT = "/usr/lib64/" |
6 | LCMS_ROOT = "/usr/lib64/" |
再进行安装前的检查:
1 | python / root / nowamagic_venv / Imaging - 1.1 . 7 / setup.py build_ext - i |
检查没问题,可以执行安装了:
1 | python / root / nowamagic_venv / Imaging - 1.1 . 7 / setup.py install |
安装成功:
01 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
02 | PIL 1.1 . 7 SETUP SUMMARY |
03 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
04 | version 1.1 . 7 |
05 | platform linux2 2.7 . 5 (default, Sep 18 2013 , 09 : 53 : 07 ) |
06 | [GCC 4.1 . 2 20080704 (Red Hat 4.1 . 2 - 54 )] |
07 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
08 | * * * TKINTER support not available |
09 | - - - JPEG support available |
10 | - - - ZLIB (PNG / ZIP ) support available |
11 | - - - FREETYPE2 support available |
12 | * * * LITTLECMS support not available |
13 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
现在 jpg 已经被支持了,程序也执行成功,这里简单记录一下过程,方便后来者。顺便附带测试程序,用 Tornado 并生成缩略图:
01 | import time |
02 | import tempfile |
03 | import Image |
04 |
05 | class AsciiImageProcessHandler(tornado.web.RequestHandler): |
06 | def post( self ): |
07 |
08 | if self .request.files: |
09 | for f in self .request.files[ 'image' ]: |
10 | rawname = f[ 'filename' ] |
11 | dstname = str ( int (time.time())) + '.' + rawname.split( '.' ).pop() |
12 | thbname = "thumb_" + dstname |
13 |
14 | self .write( dstname ) |
15 |
16 | tf = tempfile.NamedTemporaryFile() |
17 | tf.write(f[ 'body' ]) |
18 | tf.seek( 0 ) |
19 |
20 | # create normal file |
21 | # img = Image.open(src) |
22 | img = Image. open (tf.name) |
23 | img.thumbnail(( 920 , 920 ),resample = 1 ) |
24 | img.save( "./static/upload/asciiimg/" + dstname) |
25 |
26 | # create thumb file |
27 | img.thumbnail(( 100 , 100 ),resample = 1 ) |
28 | img.save( "./static/upload/asciiimg_tn/" + thbname) |
29 | |
30 | tf.close() |