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 list语法学习(带例子)
Nov 01 Python
在Python的Flask框架中实现全文搜索功能
Apr 20 Python
Python读取网页内容的方法
Jul 30 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
Nov 14 Python
Python中%是什么意思?python中百分号如何使用?
Mar 20 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 26 Python
详解如何用django实现redirect的几种方法总结
Nov 22 Python
python运行时强制刷新缓冲区的方法
Jan 14 Python
详解python函数的闭包问题(内部函数与外部函数详述)
May 17 Python
python 图片二值化处理(处理后为纯黑白的图片)
Nov 01 Python
解决tensorflow添加ptb库的问题
Feb 10 Python
Django中从mysql数据库中获取数据传到echarts方式
Apr 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
基于xcache的配置与使用详解
2013/06/18 PHP
apache中为php 设置虚拟目录
2014/12/17 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
js 数据类型转换总结笔记
2011/01/17 Javascript
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
JS 表单验证大全
2011/11/23 Javascript
javascript (用setTimeout而非setInterval)
2011/12/28 Javascript
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
JavaScript变量的作用域全解析
2015/08/14 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
很全面的JavaScript常用功能汇总集合
2016/01/22 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
基于构造函数的五种继承方法小结
2017/07/27 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
详解vscode中vue代码颜色插件
2018/10/11 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
Python 求数组局部最大值的实例
2019/11/26 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
Python自动创建Excel并获取内容
2020/09/16 Python
python中spy++的使用超详细教程
2021/01/29 Python
深入浅出CSS3 background-clip,background-origin和border-image教程
2011/01/27 HTML / CSS
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
STP协议的主要用途是什么?为什么要用STP
2012/12/20 面试题
怎样拟定创业计划书
2014/05/01 职场文书
大学生预备党员自我评价
2015/03/04 职场文书
商场营业员岗位职责
2015/04/14 职场文书
《雷雨》教学反思
2016/02/20 职场文书
JavaScript前端面试组合函数
2022/06/21 Javascript