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中的Descriptor描述符类
Jun 14 Python
分享给Python新手们的几道简单练习题
Sep 21 Python
python中map()函数的使用方法示例
Sep 29 Python
PyQt实现界面翻转切换效果
Apr 20 Python
python交互界面的退出方法
Feb 16 Python
使用Python中的reduce()函数求积的实例
Jun 28 Python
python实现复制大量文件功能
Aug 31 Python
python multiprocessing多进程变量共享与加锁的实现
Oct 02 Python
如何解决django-celery启动后迅速关闭
Oct 16 Python
Python有参函数使用代码实例
Jan 06 Python
浅谈python出错时traceback的解读
Jul 15 Python
AI:如何训练机器学习的模型
Apr 16 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 存储文本换行实现方法
2010/01/05 PHP
php生成随机密码的几种方法
2011/01/17 PHP
php实现aes加密类分享
2014/02/16 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
2013/03/04 Javascript
Javascript无阻塞加载具体方式
2013/06/28 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
2017/02/27 Javascript
关于使用js算总价的问题
2017/06/23 Javascript
bootstrap Table服务端处理分页(后台是.net)
2017/10/19 Javascript
JS实现简单获取最近7天和最近3天日期的方法
2018/04/18 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
2018/08/14 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
react-native 实现购物车滑动删除效果的示例代码
2021/01/15 Javascript
Python struct.unpack
2008/09/06 Python
解决python3 urllib 链接中有中文的问题
2018/07/16 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
Python 发送邮件方法总结
2020/08/10 Python
python 绘制场景热力图的示例
2020/09/23 Python
葡萄牙鞋子品牌:Fair
2016/12/10 全球购物
String和StringBuffer的区别
2015/08/13 面试题
《蒲公英》教学反思
2014/02/28 职场文书
临床医学生职业规划书范文
2014/10/25 职场文书
党风廉政建设调研报告
2015/01/01 职场文书
少先队工作总结2015
2015/05/13 职场文书
中学团支部工作总结
2015/08/13 职场文书
2016大学优秀学生干部事迹材料
2016/03/01 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书