Python PIL读取的图像发生自动旋转的实现方法


Posted in Python onJuly 05, 2019

对于手机、相机等设备拍摄的照片,由于手持方向的不同,拍出来的照片可能是旋转0°、90°、180°和270°。即使在电脑上利用软件将其转正,他们的exif信息中还是会保留方位信息。

在用PIL读取这些图像时,读取的是原始数据,也就是说,即使电脑屏幕上显示是正常的照片,用PIL读进来后,也可能是旋转的图像,并且图片的size也可能与屏幕上的不一样。

对于这种情况,可以利用PIL读取exif中的orientation信息,然后根据这个信息将图片转正后,再进行后续操作,具体如下。

from PIL import Image, ExifTags
img = Image.open(file)
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

顺便提一句,这里rotate中的“expand = True”是将图片尺寸也进行相应的变换。如果不加这句,则size不变。

详情参见:https://stackoverflow.com/questions/4228530/pil-thumbnail-is-rotating-my-image

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现处理管道的方法
Jun 04 Python
Python基于回溯法子集树模板解决全排列问题示例
Sep 07 Python
python实现多线程行情抓取工具的方法
Feb 28 Python
Python实现简单http服务器
Apr 12 Python
在Python中通过getattr获取对象引用的方法
Jan 21 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
Jul 03 Python
Python爬虫学习之获取指定网页源码
Jul 30 Python
利用python实现短信和电话提醒功能的例子
Aug 08 Python
Python如何获取Win7,Win10系统缩放大小
Jan 10 Python
python 实现两个npy档案合并
Jul 01 Python
Django正则URL匹配实现流程解析
Nov 13 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
Feb 06 Python
python读出当前时间精度到秒的代码
Jul 05 #Python
python读写csv文件方法详细总结
Jul 05 #Python
Python考拉兹猜想输出序列代码实践
Jul 05 #Python
python读写csv文件实例代码
Jul 05 #Python
python暴力解压rar加密文件过程详解
Jul 05 #Python
Python 使用folium绘制leaflet地图的实现方法
Jul 05 #Python
Python 给定的经纬度标注在地图上的实现方法
Jul 05 #Python
You might like
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
如何修改yii2.0自带的user表为其它的表
2017/08/01 PHP
document.forms用法示例介绍
2014/06/26 Javascript
再探JavaScript作用域
2014/09/24 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
Mongoose学习全面理解(推荐)
2017/01/21 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
JS与HTML结合实现流程进度展示条思路详解
2017/09/03 Javascript
js实现会跳动的日历效果(完整实例)
2017/10/18 Javascript
vue中echarts3.0自适应的方法
2018/02/26 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
2019/03/13 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
vue 实现走马灯效果
2019/10/28 Javascript
VuePress 中如何增加用户登录功能
2019/11/29 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
浅析Python中MySQLdb的事务处理功能
2016/09/21 Python
Python用zip函数同时遍历多个迭代器示例详解
2016/11/14 Python
Python简单实现控制电脑的方法
2018/01/22 Python
对python中的for循环和range内置函数详解
2018/04/17 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
2020/04/08 Python
python 实现批量图片识别并翻译
2020/11/02 Python
python安装sklearn模块的方法详解
2020/11/28 Python
HTML5 CSS3给网站设计带来出色效果
2009/07/16 HTML / CSS
法学专业本科生自荐信范文
2013/12/17 职场文书
小小商店教学反思
2014/04/27 职场文书
高中军训感想
2015/08/07 职场文书
使用Django实现商城验证码模块的方法
2021/06/01 Python
Oracle表空间与权限的深入讲解
2021/11/17 Oracle
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript
Spring Boot优化后启动速度快到飞起技巧示例
2022/07/23 Java/Android