Python 处理图片失真

昨天做一个简单的图片处理后台需要用到 PIL(Python Image Library),之前没怎么用过遇到几个难点卡住了几次,没有时间仔细研究,暂作记录:

 

应用 PIL 中的 Image Module 可以方便的处理图片,比如旋转、剪裁、获取图片尺寸等等,简单看了几篇例子和文档(http://www.pythonware.com/library/pil/handbook/image.htm)感觉还是很强大。但应用处理的方法首先要获得一个 image 对象,应用 open 方法打开一个路径很简单,但是从一段 str 类型获得 image 对象就有点绕,比如请求一张网络上的图片,或者从数据库中读取出来图片,需要用 StringIO 处理一下,代码:

 


res = urilib2.urlopen(img_url)
img_str = res.read()
img = Image.open(StringIO.StringIO(img_str)) #得到 img 对象

 

暂时还不明白 fromstring 和 frombuffer 打开一张图片和这有什么不一样。。

 

另外在处理过图片存储的时候很坑爹,需要用 tostring() 方法将图片还原回 str 格式,但是文档中对 tostring()  中方法的描述实在是很少,结果很可能保存出来的图片比原来的失真了,google 了一阵没见靠谱的答案,只有一篇http://mail.python.org/pipermail/image-sig/2004-September/002908.html 让人大概知道保存的时候要传若干参数进去:

new_img = img.rotate(90)
new_img_str = new_img.tostring('jpeg', 'RGB', 90) 

 第三个参数是 jpeg 图片的 quality, 0-90,默认 75,所以如果不传基本肉眼能看出来处理过的图片失真了。参照 JPEG 描述:http://www.pythonware.com/library/pil/handbook/format-jpeg.htm

 

暂时记录,下次用到再仔细研究。

 

-EOF-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值