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进程类subprocess的一些操作方法例子
Nov 22 Python
在Django中限制已登录用户的访问的方法
Jul 23 Python
Python矩阵常见运算操作实例总结
Sep 29 Python
python中判断文件编码的chardet(实例讲解)
Dec 21 Python
tensorflow实现softma识别MNIST
Mar 12 Python
深入浅析python with语句简介
Apr 11 Python
python获取交互式ssh shell的方法
Feb 14 Python
详解用python自制微信机器人,定时发送天气预报
Mar 25 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
Jupyter Notebook输出矢量图实例
Apr 14 Python
python图片验证码识别最新模块muggle_ocr的示例代码
Jul 03 Python
使用Python下载抖音各大V视频的思路详解
Feb 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
php代码优化及php相关问题总结
2006/10/09 PHP
Discuz! Passport 通行证整合
2008/03/27 PHP
php使用curl模拟登录后采集页面的例子
2013/11/04 PHP
php实现单笔转账到支付宝功能
2018/10/09 PHP
PHP的介绍以及优势详细分析
2019/09/05 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
2020/06/05 PHP
JQuery Easyui Tree的oncheck事件实现代码
2010/05/28 Javascript
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
ajax中get和post的说明及使用与区别
2012/12/23 Javascript
Extjs4 关于Store的一些操作(加载/回调/添加)
2013/04/18 Javascript
分享JavaScript获取网页关闭与取消关闭的事件
2013/12/13 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
layui获取多选框中的值方法
2018/08/15 Javascript
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
浅析Vue中拆分视图层代码的5点建议
2019/08/15 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
python新手经常遇到的17个错误分析
2014/07/30 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
2019/03/01 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
浅谈Python中的字符串
2020/06/10 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
2020/07/14 Python
python 实现Harris角点检测算法
2020/12/11 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
屈臣氏官方旗舰店:亚洲享负盛名的保健及美妆零售商
2019/03/15 全球购物
材料工程专业毕业生求职信
2014/03/04 职场文书
《和田的维吾尔》教学反思
2014/04/14 职场文书
《毛主席在花山》教学反思
2014/04/20 职场文书
2014年教师工作总结
2014/11/10 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
教你怎么用Python生成九宫格照片
2021/05/20 Python
python模块与C和C++动态库相互调用实现过程示例
2021/11/02 Python