Python3 使用pli优化图片大小,相机或手机拍图片根据exif旋转、纠正方向
首先安装
pip install pillow
如果报错,请根据报错的信息去搜索一下,一般都能得到解决,未找到请升级pip
python -m pip install --upgrade pip
或者
pip install --upgrade pip
那么写个方法
from PIL import Image,ExifTags
#定义保存图片都路径
def get_outfile(infile, outfile):
if outfile:
return outfile
dir, suffix = os.path.splitext(infile)
outfile = '{}-cover{}'.format(dir, suffix)
return outfile
#缩小图片大小,保持原始宽高
def compress_image(infile, outfile='', kb=3200, step=5, quality=80):
o_size = os.path.getsize(infile) / 1024
if o_size <= kb:
return False
outfile = self.get_outfile(infile, outfile)
while o_size > kb:
img = Image.open(infile)
#相机或手机拍摄图片需要根据exif旋转角度
try:
for orientation in ExifTags.TAGS.keys():
if ExifTags.TAGS[orientation] == 'Orientation': break
exif = dict(img._getexif().items())
if exif[orientation] == 3:
img = img.rotate(180, expand=True)
elif exif[orientation] == 6:
img = img.rotate(270, expand=True)
elif exif[orientation] == 8:
img = img.rotate(90, expand=True)
except:
pass
img.save(outfile, quality=quality)
if quality - step < 0:
break
quality -= step
o_size = os.path.getsize(outfile) / 1024
return outfile
compress_image(infile, outfile='', kb=3200, step=5, quality=80)
infile : 原始图片路径
outfile: 生成图片保存路径
kb : 图片压缩上限,单位kb
step : 每次压缩质量,
quality: 图片质量,jpg特有,最高为100的质量
使用
small_path = compress_image(image_path)
if not small_path:
small_path = image_path
在某个项目中用到,就记录一下吧~特别是碰到图片上传后改变了方向的,特别郁闷,所以找到了解决方案
img = Image.open(infile)
#相机或手机拍摄图片需要根据exif旋转角度
try:
for orientation in ExifTags.TAGS.keys():
if ExifTags.TAGS[orientation] == 'Orientation': break
exif = dict(img._getexif().items())
if exif[orientation] == 3:
img = img.rotate(180, expand=True)
elif exif[orientation] == 6:
img = img.rotate(270, expand=True)
elif exif[orientation] == 8:
img = img.rotate(90, expand=True)
except:
pass
img.save(outfile, quality=100)

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
如何在 Ubuntu 20.04 上安装 Tomcat 9
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-tomcat-9-on-ubuntu-20-04/ 这篇指南描述如何在 Ubuntu 20.04 上安装和配置 Tomcat 9 。 Apache Tomcat是一个开源的 Web 服务器和 Java servlet 容器。它是世界上最流行的选择,用来构建基于 Java 的网站和应用。Tomcat 是一个轻量级,易于使用,并且有一个强壮的扩展生态系统。 一、安装 Java Tomcat 9 要求在系统上安装 Java SE 8 或者更新版本。我们将会安装 OpenJDK 11,Java 平台的开源实现。 以 root 或者其他 sudo 权限用户身份运行下面的命令来更新软件包索引,并且安装 OpenJDK 11 JDK 软件包: sudo apt update sudo apt install openjdk-11-jdk 一旦安装完成,通过检查 Java 版本来验证它: java -version 输出应该像下面这样: openjdk version "11.0.7" 2020...
-
下一篇
如何理解Java中的自动拆箱和自动装箱?
如何理解Java中的自动拆箱和自动装箱? 小伟刚毕业时面的第一家公司就被面试官给问住了... 如何理解Java中的自动拆箱和自动装箱? 自动拆箱?自动装箱?什么鬼,听都没听过啊,这...这..知识盲区... 回到家后小伟赶紧查资料,我透,这不就是问基本类型跟封装类型吗,面试官整啥名词呢... 别问结果,问就是没过。 1、什么是自动装箱,自动拆箱定义:基本数据类型和包装类之间可以自动地相互转换 理解:装箱就是自动将基本数据类型转换为封装类型,拆箱就是自动将封装类型转换为基本数据类型。 我们知道,Java中提供了四大类基本数据类型,分别是:整数、浮点数、字符型和布尔型,其中: 整数包含:byte、int、short、long浮点数包含:float、double字符类型:char布尔类型:boolean基本数据类型相信大家一定很熟悉了吧,来来来,说说他们的取值范围~ 数据类型 取值范围byte -128 ~ 127short -32786 ~ 32767int -4294967296 ~ 4294967295long -2^64^ ~ 2^64^ -1float 3.4e-038 ~ 3.4...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7,8上快速安装Gitea,搭建Git服务器