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中操作字典之update()方法的使用
May 22 Python
python中类和实例如何绑定属性与方法示例详解
Aug 18 Python
python读取excel表格生成erlang数据
Aug 26 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
Dec 03 Python
Python使用分布式锁的代码演示示例
Jul 30 Python
python使用flask与js进行前后台交互的例子
Jul 19 Python
修改 CentOS 6.x 上默认Python的方法
Sep 06 Python
python 多维高斯分布数据生成方式
Dec 09 Python
Pycharm配置autopep8实现流程解析
Nov 28 Python
Python 实现RSA加解密文本文件
Dec 30 Python
Django实现WebSocket在线聊天室功能(channels库)
Sep 25 Python
python数字类型和占位符详情
Mar 13 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
Access数据库导入Mysql的方法之一
2006/10/09 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
浅析Yii2中GridView常见操作
2016/04/22 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
javascript delete 使用示例代码
2010/03/29 Javascript
ExtJS如何设置与获取radio控件的选取状态
2014/01/22 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
javascript显示中文日期的方法
2015/06/18 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
React利用插件和不用插件实现双向绑定的方法详解
2017/07/03 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
微信小程序module.exports模块化操作实例浅析
2018/12/20 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
python中实现php的var_dump函数功能
2015/01/21 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
使用python对多个txt文件中的数据进行筛选的方法
2019/07/10 Python
python3.8下载及安装步骤详解
2020/01/15 Python
Python列表list操作相关知识小结
2020/01/29 Python
在tensorflow中实现屏蔽输出的log信息
2020/02/04 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
Python爬虫实现selenium处理iframe作用域问题
2021/01/27 Python
Python爬取某平台短视频的方法
2021/02/08 Python
HTML 5 标签、属性、事件及浏览器兼容性速查表 附打包下载
2012/10/20 HTML / CSS
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
泰国第一在线超市:Tops
2021/02/13 全球购物
PHP开发的一般流程
2013/08/13 面试题
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
春风化雨观后感
2015/06/11 职场文书
apache基于端口创建虚拟主机的示例
2021/04/22 Servers
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫