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 相关文章推荐
win7 下搭建sublime的python开发环境的配置方法
Jun 18 Python
python批量制作雷达图的实现方法
Jul 26 Python
Python制作刷网页流量工具
Apr 23 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
Mar 06 Python
Python实现代码块儿折叠
Apr 15 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
Apr 15 Python
python如何调用java类
Jul 05 Python
Python如何解除一个装饰器
Aug 07 Python
使用Python解析Chrome浏览器书签的示例
Nov 13 Python
python 爬取豆瓣网页的示例
Apr 13 Python
python自动计算图像数据集的RGB均值
Jun 18 Python
Python+腾讯云服务器实现每日自动健康打卡
Dec 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
深入解析PHP的引用计数机制
2013/06/14 PHP
Thinkphp多文件上传实现方法
2014/10/31 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
功能强大的php文件上传类
2016/08/29 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
2017/03/31 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
js+div实现图片滚动效果代码
2014/02/10 Javascript
Javascript学习笔记之函数篇(四):arguments 对象
2014/11/23 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
jQuery简单实现遍历数组的方法
2015/04/14 Javascript
Jquery ajax基础教程
2015/11/20 Javascript
AngularJS数据源的多种获取方式汇总
2016/02/02 Javascript
javascript自定义滚动条实现代码
2020/04/20 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
vue 注册组件的使用详解
2018/05/05 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
使用Python编写类UNIX系统的命令行工具的教程
2015/04/15 Python
python3实现跳一跳点击跳跃
2018/01/08 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2018/07/19 Python
Python日期时间Time模块实例详解
2019/04/15 Python
python递归法解决棋盘分割问题
2019/07/17 Python
django将网络中的图片,保存成model中的ImageField的实例
2019/08/07 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
如何写出高质量、高性能的MySQL查询
2014/11/17 面试题
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
运动会广播稿200字
2014/01/15 职场文书
分公司经理任命书
2014/06/05 职场文书
2014年信用社工作总结
2014/11/25 职场文书
2015年三年级班主任工作总结
2015/05/21 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
2016年母亲节广告语
2016/01/28 职场文书
《桂花雨》教学反思
2016/02/19 职场文书