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学习笔记_数据排序方法
May 22 Python
Django应用程序中如何发送电子邮件详解
Feb 04 Python
python实现感知器
Dec 19 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
May 10 Python
PYQT5实现控制台显示功能的方法
Jun 25 Python
Django框架模型简单介绍与使用分析
Jul 18 Python
Python基于OpenCV实现人脸检测并保存
Jul 23 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
python matplotlib中的subplot函数使用详解
Jan 19 Python
对Matlab中共轭、转置和共轭装置的区别说明
May 11 Python
Python如何测试stdout输出
Aug 10 Python
Django实现在线无水印抖音视频下载(附源码及地址)
May 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
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
2013/04/13 PHP
用php简单实现加减乘除计算器
2014/01/06 PHP
ThinkPHP模板判断输出Present标签用法详解
2014/06/30 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
关于JS管理作用域的问题
2013/04/10 Javascript
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
每天一篇javascript学习小结(Array数组)
2015/11/11 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
2017/09/07 Javascript
微信小程序实现的动态设置导航栏标题功能示例
2019/01/31 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
Python守护进程(daemon)代码实例
2015/03/06 Python
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
2016/06/30 Python
利用pyinstaller将py文件打包为exe的方法
2018/05/14 Python
pygame游戏之旅 添加碰撞效果的方法
2018/11/20 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
浅析Python3中的对象垃圾收集机制
2019/06/06 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
解决django-xadmin列表页filter关联对象搜索问题
2019/11/15 Python
python实现局域网内实时通信代码
2019/12/22 Python
Python3 用matplotlib绘制sigmoid函数的案例
2020/12/11 Python
Lyle & Scott苏格兰金鹰官网:英国皇室御用品牌
2018/05/09 全球购物
创业者迈进成功第一步:如何写创业计划书?
2014/03/22 职场文书
“三支一扶”支教教师思想汇报
2014/09/13 职场文书
课改心得体会范文
2016/01/25 职场文书
创业计划书之餐饮
2019/09/02 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
销区经理年终述职报告模板
2019/11/28 职场文书
Win11绿屏怎么办?Win11绿屏死机的解决方法
2021/11/21 数码科技