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数据结构之二叉树的建立实例
Apr 29 Python
Python解析xml中dom元素的方法
Mar 12 Python
python转换字符串为摩尔斯电码的方法
Jul 06 Python
Python中标准库OS的常用方法总结大全
Jul 19 Python
对python中使用requests模块参数编码的不同处理方法
May 18 Python
python实现俄罗斯方块游戏
Mar 25 Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 Python
解决Python内层for循环如何break出外层的循环的问题
Jun 24 Python
python通过链接抓取网站详解
Nov 20 Python
python将三维数组展开成二维数组的实现
Nov 30 Python
基于FME使用Python过程图解
May 13 Python
Python爬虫爬取新闻资讯案例详解
Jul 14 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 提速工具eAccelerator 配置参数详解
2010/05/16 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
理解JS事件循环
2016/01/07 Javascript
jQuery滚动新闻实现代码
2016/06/26 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
jQuery无刷新上传之uploadify简单代码
2017/01/17 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
AngularJS中table表格基本操作示例
2017/10/10 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
js实现GIF图片的分解和合成
2019/10/24 Javascript
jQuery操作事件完整实例分析
2020/01/10 jQuery
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
按日期打印Python的Tornado框架中的日志的方法
2015/05/02 Python
玩转python爬虫之URLError异常处理
2016/02/17 Python
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
2018/04/17 Python
Windows下Python3.6安装第三方模块的方法
2018/11/22 Python
使用django的objects.filter()方法匹配多个关键字的方法
2019/07/18 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
2020/04/10 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
手把手教你用Django执行原生SQL的方法
2021/02/18 Python
浅谈h5自定义audio(问题及解决)
2016/08/19 HTML / CSS
web字体加载方案优化小结
2019/11/29 HTML / CSS
雅萌 (YA-MAN) :日本美容家电领域的龙头企业
2017/05/12 全球购物
幼儿园消防演练方案
2014/02/13 职场文书
小班秋游活动方案
2014/02/22 职场文书
2015年财务试用期工作总结
2014/12/24 职场文书
毕业典礼邀请函
2015/01/31 职场文书
营业员岗位职责
2015/02/11 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
升学宴来宾致辞
2015/07/27 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL