在SAE python上使用PIL image 获取较高质量图片的方法
🕖 by pyList at 2012-03-23 18:14
最近在做小脚丫 https://bbttxs.com 15 应用,在使用 PIL image 处理用户上传的图片做头像时出现一些质量的问题,处理后的头像100x100,太差了。
在使用PIL image处理图像要获取高质量的关键地方是下面两点:
- 处理时要用 ANTIALIAS;
- 保存时是要设置 quality;
在python ide 可以这样处理:
im.resize(box, Image.ANTIALIAS)
im.save(path, 'JPEG', quality = 95)
但在SAE 环境里需要借助 StringIO
,下面开始做一个简单的实例:
前端html 代码
<form action="" enctype="multipart/form-data" method="post">
<input name="myfile" type="file">
<input type="submit" value="Submit">
</form>
后台处理代码
导入需要的模块
from StringIO import StringIO
from PIL import Image
获取表单提交的数据
#我用Tornado,别的框架这里有点差别
myfile = self.request.files['myfile'][0]
im = Image.open(StringIO(myfile['body']))
im = im.resize((100,100), Image.ANTIALIAS)
#下面一行简单方便,但生成的图片质量很差,头像惨不忍睹
#img_data = im.tostring('jpeg', 'RGB')
#下面是获取要显示或保存的图像数据
output = StringIO()
im.save(output, 'JPEG', quality = 95)
img_data = output.getvalue()
output.close()
#在浏览器现实图片
self.set_header('Content-Type','image/jpeg')
self.write(img_data)
你也可以保存为png 格式
im.save(output, 'PNG')
关于保存格式和质量的测试
我是要生成100x100px 的头像,色彩模式RGB,用jpeg格式,下面是不同的quality 值对应的图像大小
quality = 50, size = 3.15 k
quality = 60, size = 3.52 k
quality = 80, size = 5.21 k
quality = 90, size = 6.30 k
quality = 95, size = 7.37 k
quality = 100, size = 13.18 k
如果用png 格式则生成23.50k的文件
作为头像设为95较合适,低于95的就不好看。如果你为了用户体验,不省空间和流量那就用png吧。
注意,如果上传gif文件则要加上 .convert('RGB')
转换
im.convert('RGB').save(output, 'JPEG', quality = 95)
本文网址: https://pylist.com/t/1332497678 (转载注明出处)
如果你有任何建议或疑问可以在下面 留言
发表第一条评论!
相关推荐
小工具
标签
sae
mail
gmail
python
发送
pil
验证码
生成
图片
轻量级
博客
一款
示例
tornado
pytenjin
blog
告一段落
send
注意
gzip
开启
方法
路径
获取
文件
运行
模版
引擎
构建
高速
微信
浏览器
识别
golang
正则
字符串
切割
硬件加速
ubnt
er
固件
路由
变砖
arris
ac1750
sbr
bbr
openwrt
访问速度
vps
加速
google
身份验证
authenticator
迁移
手机
静音
风扇
主机
笔记本
改造
之坑
files
open
服务
最新版
wndr4300
升级
默认值
struct
设置
html
中文
实体
转换
api
搜索引擎
网址
提交
自动
虚拟机
virtualbox
很慢
网络
解决
ssdb
数据库
设计
结构
usb
上网卡
共享
webview
android
url
js
加载
自动更新
microsoft
mac
关闭
app
store
登录
未知
低功耗
web
爬虫
服务器
组装
尝鲜
视频
体验
cpu
debian
ubuntu
查看
温度
chrome
server
浏览
webdriver
微博
selenium
gnu
linux
安装
系统启动
编译
宅家
坑记
屏幕
动手
nginx
quic
抢先
useragent
蜘蛛
真假
最近发表
- Mac 关闭 Microsoft 自动更新
- Mac 登录 App Store 出现“发生了未知错误”的解决方法
- 老笔记本改造为无风扇静音主机方案
- 自己组装21瓦低功耗家庭爬虫、文件、web服务器
- 微信视频号尝鲜体验
- Ubuntu/Debian 查看CPU温度的方法
- 在Ubuntu/debian Server 系统使用Chrome 无头浏览模式
- 换手机后 Google 身份验证器 Google Authenticator 数据迁移的简单方法
- 使用Golang selenium WebDriver 自动登录微博
- 在 Ubuntu 或其它 GNU/Linux 系统下安装 Debian
- Mac 下制作 USB ubuntu/debian 系统启动、安装盘的几种方法
- ubuntu/debian 下自行编译 OpenWRT 固件
- 宅家自己动手换手机屏幕掉坑记
- 路由 UBNT ER-X 官方固件升级及开启硬件加速的方法
- 在 Nginx 和 Golang web 上抢先体验 QUIC
- 从UserAgent识别搜索引擎并判断真假蜘蛛
最近浏览
- Golang 正则切割字符串
- 路由 UBNT ER-X 官方固件升级及开启硬件加速的方法
- ARRIS SBR-AC1750 路由变砖拆解折腾
- Openwrt 路由上开启BBR
- 开启BBR 加速小VPS访问速度
- 换手机后 Google 身份验证器 Google Authenticator 数据迁移的简单方法
- 老笔记本改造为无风扇静音主机方案
- Golang 服务之坑:too many open files
- WNDR4300 固件升级到 OpenWrt 最新版
- go struct 设置默认值
- 用python 实现中文与html实体相互转换
- 利用 API 自动向搜索引擎提交网址
- VirtualBox 虚拟机里网络很慢的解决方法
- SSDB如何设计数据库结构?
- Openwrt 使用USB 4G 上网卡共享网络
- android webview 加载URL js不执行的解决方法