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条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Mario游戏-低调大师作品
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装