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编程中的异常处理教程
Aug 21 Python
总结用Pdb库调试Python的方式及常用的命令
Aug 18 Python
Python图片裁剪实例代码(如头像裁剪)
Jun 21 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
Python字符串处理的8招秘籍(小结)
Aug 13 Python
python命令 -u参数用法解析
Oct 24 Python
Python单元测试与测试用例简析
Nov 09 Python
python飞机大战pygame碰撞检测实现方法分析
Dec 17 Python
Python Scrapy框架第一个入门程序示例
Feb 05 Python
python爬虫库scrapy简单使用实例详解
Feb 10 Python
Django基于Models定制Admin后台实现过程解析
Nov 11 Python
OpenCV图像变换之傅里叶变换的一些应用
Jul 26 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中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
2020/04/07 PHP
javascript面向对象的方式实现的弹出层效果代码
2010/01/28 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
Bootstrap实现带动画过渡的弹出框
2016/08/09 Javascript
深入分析javascript中console命令
2016/08/14 Javascript
修改Jquery Dialog 位置的实现方法
2016/08/26 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
nodejs实现的简单web服务器功能示例
2018/03/15 NodeJs
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
基于JS实现数字动态变化显示效果附源码
2019/07/18 Javascript
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
python基础教程之字典操作详解
2014/03/25 Python
python脚本实现统计日志文件中的ip访问次数代码分享
2014/08/06 Python
详细讲解Python中的文件I/O操作
2015/05/24 Python
Python中的深拷贝和浅拷贝详解
2015/06/03 Python
python 文件转成16进制数组的实例
2018/07/09 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
使用python实现名片管理系统
2020/06/18 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
用CSS3实现瀑布流布局的示例代码
2017/11/10 HTML / CSS
学生党员思想汇报
2013/12/28 职场文书
爱祖国演讲稿
2014/05/04 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
敲诈同学钱财检讨书范文
2014/11/18 职场文书
2014年监理个人工作总结
2014/12/11 职场文书
聘任书的格式及模板
2019/10/28 职场文书
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python