Python高质量缩放切图,抗锯齿

最近刚接触Python,以迅雷不及掩耳盗铃之势(只是迫不及待)应用到工作中去了
之前用 cmd+photoshop做批量图像处理(缩放切片),在执行效率(速度)上和灵活度上有很大限制,遂转战Python(我对于大语种庞大的类库感到力不从心,喜欢用脚本语言来快速编辑、执行)
真正开始学习Python第一天,我奋战到深夜三点,勉强完成了可以替代先前用“cmd+photoshop快捷批处理”实现的切图工具,执行效率大概是先前的10倍。
为什么说是“勉强”,因为输出图像质量没Photoshop输出的好。
Python图像处理用到PIL(Python Imaging Library),在resize(缩放)的时候会很大程度得降低图像可观性(给我的感觉是部分像素相对位置乱了,没有平滑缩放过渡),看下示例:
 ps_resize.jpg   pil_resize_default.jpg   
(左:PS改变图像大小后输出,右:使用PIL的缩放im.resize(size)后输出)
上面可以看到PIL默认缩放后输出的图像有“破损”
今天google到园子中另一位兄弟的一篇随笔里面包含了这个高质量输出的说明

pil_resize_filter.jpg
PIL带ANTIALIAS滤镜缩放结果
im.resize(size, Image.ANTIALIAS)

从结果看,基本上可以和PS输出的相匹敌了

速度上,比不带ANTIALIAS滤镜输出的慢了8倍左右,但还是比PS输出快,而且整个程序稳定性和灵活度比CMD+PS快捷批处理来的好。
在这之前我一直以为是最后im.save输出导致图像质量下降的,浪费了不少时间,嗨~~

备注此次练兵涉及的内容:

图像分割
>>> box = (int(left), int(top),int(right),int(bottom))
>>> region = im.crop(box)

图像缩放
>>> im_resized=im.resize(size, Image.ANTIALIAS)

类似dir的方法:glob
>>> path="c:/test"
>>> glob.glob(path+"/*")

还涉及一些os操作
os.path.basename
os.path.isdir
os.path.exists
os.mkdir

posted on 2014-12-10 12:44  hzm_frank  阅读(13003)  评论(0编辑  收藏  举报

导航