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 07 Python
Python查询阿里巴巴关键字排名的方法
Jul 08 Python
Python卸载模块的方法汇总
Jun 07 Python
Python动刷新抢12306火车票的代码(附源码)
Jan 24 Python
使用Python读取大文件的方法
Feb 11 Python
Django添加sitemap的方法示例
Aug 06 Python
利用Python求阴影部分的面积实例代码
Dec 05 Python
Python有参函数使用代码实例
Jan 06 Python
python读取图片的几种方式及图像宽和高的存储顺序
Feb 11 Python
基于Python爬虫采集天气网实时信息
Jun 05 Python
Python字符串及文本模式方法详解
Sep 10 Python
python中str内置函数用法总结
Dec 27 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 include,include_once,require,require_once
2008/09/05 PHP
使用PHP计算两个路径的相对路径
2013/06/14 PHP
php输出1000以内质数(素数)示例
2014/02/16 PHP
Yii中特殊行为ActionFilter的使用方法示例
2020/10/18 PHP
如何实现动态删除javascript函数
2007/05/27 Javascript
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
写出更好的JavaScript程序之undefined篇(中)
2009/11/23 Javascript
基于jquery的放大镜效果
2012/05/30 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
2016/05/19 Javascript
详解jQuery插件开发方式
2016/11/22 Javascript
微信小程序 简单教程实例详解
2017/01/13 Javascript
JavaScript实现图像模糊化的方法实例
2017/01/15 Javascript
Java与JavaScript中判断两字符串是否相等的区别
2017/03/13 Javascript
js中变量的连续赋值(实例讲解)
2017/07/08 Javascript
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
vue 组件间的通信之子组件向父组件传值的方式
2020/07/29 Javascript
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
python中list循环语句用法实例
2014/11/10 Python
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
python类:class创建、数据方法属性及访问控制详解
2016/07/25 Python
Python中的函数作用域
2018/05/07 Python
使用python实现对元素的长截图功能
2019/11/14 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
python 如何使用find和find_all爬虫、找文本的实现
2020/10/16 Python
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
时尚、社区、科技:SEVENSTORE
2019/04/26 全球购物
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
师范教师毕业鉴定
2014/01/13 职场文书
感恩老师的演讲稿
2014/05/06 职场文书
感恩节活动策划方案
2014/05/16 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
入股合作协议书
2014/10/12 职场文书
市场部岗位职责范本
2015/04/15 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书