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 13 Python
Python快速排序算法实例分析
Nov 29 Python
Python3多进程 multiprocessing 模块实例详解
Jun 11 Python
Python判断以什么结尾以什么开头的实例
Oct 27 Python
python实现字符串加密成纯数字
Mar 19 Python
Django 外键的使用方法详解
Jul 19 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
Jan 06 Python
Python 写了个新型冠状病毒疫情传播模拟程序
Feb 14 Python
Python基础之字符串常见操作经典实例详解
Feb 26 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
Mar 23 Python
利用Python实现斐波那契数列的方法实例
Jul 26 Python
一文带你了解Python 四种常见基础爬虫方法介绍
Dec 04 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
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
2013/12/25 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
PHP利用递归函数实现无限级分类的方法
2019/03/22 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
2019/09/18 PHP
Aster vs Newbee BO3 第二场2.18
2021/03/10 DOTA
JQuery伸缩导航练习示例
2013/11/13 Javascript
js弹出div并显示遮罩层
2014/02/12 Javascript
jQuery结合HTML5制作的爱心树表白动画
2015/02/01 Javascript
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
Vue应用部署到服务器的正确方式
2017/07/15 Javascript
Element输入框带历史查询记录的实现示例
2019/01/15 Javascript
vue中typescript装饰器的使用方法超实用教程
2019/06/17 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
python原始套接字编程示例分享
2014/02/21 Python
理解python正则表达式
2016/01/15 Python
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
python实现决策树分类算法
2017/12/21 Python
python实现邮件发送功能
2019/08/10 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
Python双链表原理与实现方法详解
2020/02/22 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
如何实现一个python函数装饰器(Decorator)
2020/10/12 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
CSS3 二级导航菜单的制作的示例
2018/04/02 HTML / CSS
KIEHL’S科颜氏官方旗舰店:源自美国的顶级护肤品牌
2018/06/07 全球购物
椰子猫砂:CatSpot
2018/08/27 全球购物
中学生爱国演讲稿
2014/09/05 职场文书
2014年统战工作总结
2014/12/09 职场文书
三好学生竞选稿范文
2019/08/21 职场文书
Nginx 常用配置
2022/05/15 Servers
教你使用Ubuntu搭建DNS服务器
2022/09/23 Servers