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使用os模块的os.walk遍历文件夹示例
Jan 27 Python
常见的在Python中实现单例模式的三种方法
Apr 08 Python
Python中的lstrip()方法使用简介
May 19 Python
Python检测生僻字的实现方法
Oct 23 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
Dec 14 Python
编写多线程Python服务器 最适合基础
Sep 14 Python
python 使用正则表达式按照多个空格分割字符的实例
Dec 20 Python
Python中list循环遍历删除数据的正确方法
Sep 02 Python
python实现修改固定模式的字符串内容操作示例
Dec 30 Python
Django解决frame拒绝问题的方法
Dec 18 Python
pandas 数据类型转换的实现
Dec 29 Python
Python实现简繁体转换
Jun 07 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
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
php中的观察者模式
2010/03/24 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
浅析PHP原理之变量(Variables inside PHP)
2013/08/09 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
jQuery获得IE版本不准确webbrowser的解决方法
2014/02/23 Javascript
JavaScript事件委托用法分析
2015/01/24 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
jQuery+HTML5实现手机摇一摇换衣特效
2015/06/05 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
2018/02/06 Javascript
Vue高版本中一些新特性的使用详解
2018/09/25 Javascript
js中对象和面向对象与Json介绍
2019/01/21 Javascript
vue-cli3跨域配置的简单方法
2019/09/06 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
Python验证企业工商注册码
2015/10/25 Python
pandas使用apply多列生成一列数据的实例
2018/11/28 Python
python模块导入的细节详解
2018/12/10 Python
python实现简单图书管理系统
2019/11/22 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
2020/03/09 Python
Django自带的用户验证系统实现
2020/12/18 Python
世界最大的私人旅行指南出版商:孤独星球
2016/08/23 全球购物
印度在线杂货店:bigbasket
2018/08/23 全球购物
"引用"与指针的区别是什么
2016/09/07 面试题
过滤器的用法
2013/10/08 面试题
环境科学专业个人求职信
2013/09/26 职场文书
《月光启蒙》教学反思
2014/03/01 职场文书
个人买房协议书范本
2014/10/06 职场文书
先进工作者推荐材料
2014/12/23 职场文书
药店营业员岗位职责
2015/04/14 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书