Python PIL读取的图像发生自动旋转的实现方法
对于手机、相机等设备拍摄的照片,由于手持方向的不同,拍出来的照片可能是旋转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处理图片之PIL模块简单使用方法
本文实例讲述了python处理图片之PIL模块简单使用方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python #encoding: utf-8 import Image class myimg: def __init__(self, open_file, save_file): self.img = Image.open(open_file) self.save_file = save_file def Change_Size(self, percent=10
-
使用Python的PIL模块来进行图片对比
在使用google或者baidu搜图的时候会发现有一个图片颜色选项,感觉非常有意思,有人可能会想这肯定是人为的去划分的,呵呵,有这种可能,但是估计人会累死, 开个玩笑,当然是通过机器识别的,海量的图片只有机器识别才能做到. 那用python能不能实现这种功能呢?答案是:能 利用python的PIL模块的强大的图像处理功能就可以做到,下面上代码: import colorsys def get_dominant_color(image): #颜色模式转换,以便输出rgb颜色值 image = im
-
python通过pil将图片转换成黑白效果的方法
本文实例讲述了python通过pil将图片转换成黑白效果的方法.分享给大家供大家参考.具体分析如下: pil功能强大,convert方法可以轻易的将图片转换,下面的代码可以将图片转换成黑白效果 from PIL import Image image_file = Image.open("convert_image.png") # open colour image image_file = image_file.convert('1') # convert image to black
-
在Python中使用PIL模块处理图像的教程
PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了.PIL功能非常强大,但API却非常简单易用. 安装PIL 在Debian/Ubuntu Linux下直接通过apt安装: $ sudo apt-get install python-imaging Mac和其他版本的Linux可以直接使用easy_install或pip安装,安装前需要把编译环境装好: $ sudo easy_install PIL 如果安装失败,根据提示先把缺失的包(比如ope
-
python中PIL安装简单教程
python 的PIL安装是一件很头疼的的事, 如果你要在python 中使用图型程序那怕只是将个图片从二进制流中存盘(例如使用Scrapy 爬网存图),那么都会使用到 PIL 这库,而这个库是出名的难安装. 它的表现为,如果你使用 Scrapy 的ImagePipeline 它就会默认使用PIL,如果没有正确安装图型解码器那会都会出现以下的错误: IOError: decoder jpeg not available 在网上找过很多方法都还是不行,也不明究竟,开始以为是 PIL 这个库的安装有
-
Python中使用PIL库实现图片高斯模糊实例
一.安装PIL PIL是Python Imaging Library简称,用于处理图片.PIL中已经有图片高斯模糊处理类,但有个bug(目前最新的1.1.7bug还存在),就是模糊半径写死的是2,不能设置.在源码ImageFilter.py的第160行: 所以,我们在这里自己改一下就OK了. 项目地址:http://www.pythonware.com/products/pil/ 二.修改后的代码 代码如下: 复制代码 代码如下: #-*- coding: utf-8 -*- from PIL
-
python使用PIL缩放网络图片并保存的方法
本文实例讲述了python使用PIL缩放网络图片并保存的方法.分享给大家供大家参考.具体实现方法如下: ''' tk_image_view_url_io_resize.py display an image from a URL using Tkinter, PIL and data_stream also resize the web image to fit a certain size display widget retaining its aspect ratio Pil facili
-
python实现通过pil模块对图片格式进行转换的方法
本文实例讲述了python实现通过pil模块对图片格式进行转换的方法.分享给大家供大家参考.具体分析如下: python的pil模块相当的智能,如果你需要对图片格式进行转换,比如jpg转转成tif,jpg转换成gif,png转换成jpg只需要在保存文件时指定正确的图片扩展名即可. 代码如下: import Image im = Image.open('test.jpg') im.save('test.tiff') # or 'test.tif' 希望本文所述对大家的Python程序设计有所帮助.
-
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
本文实例讲述了Python通过PIL获取图片主要颜色并和颜色库进行对比的方法.分享给大家供大家参考.具体分析如下: 这段代码主要用来从图片提取其主要颜色,类似Goolge和Baidu的图片搜索时可以指定按照颜色搜索,所以我们先需要将每张图片的主要颜色提取出来,然后将颜色划分到与其最接近的颜色段上,然后就可以按照颜色搜索了. 在使用google或者baidu搜图的时候会发现有一个图片颜色选项,感觉非常有意思,有人可能会想这肯定是人为的去划分的,呵呵,有这种可能,但是估计人会累死,开个玩笑,当然是通
-
在Mac OS系统上安装Python的Pillow库的教程
今天帮朋友做个python的小工具,发现系统上缺少ptyhon的支持库,返回如下信息 ImportError: No module named PIL 然后就下载安装,因为机器上也没有python的管理工具pip,所以也一并安装 1. 安装pip sudo easy_install pip pip 安装成功就可以直接安装pil或者pillow 2. 通过命令pip install pil pip install Pil Downloading/unpacking Pil Could not f
-
Python实现更改图片尺寸大小的方法(基于Pillow包)
本文实例讲述了Python实现更改图片尺寸大小的方法.分享给大家供大家参考,具体如下: 1.PIL包推荐Pillow. 2.源码: #encoding=utf-8 #author: walker #date: 2014-05-15 #function: 更改图片尺寸大小 import os import os.path from PIL import Image ''' filein: 输入图片 fileout: 输出图片 width: 输出图片宽度 height:输出图片高度 type:输出图
随机推荐
- VBS显示当前标准时间
- 探究iOS多线程究竟不安全在哪里?
- PHP PDO函数库详解
- Android Service生命周期详解
- 5种Android数据存储方式汇总
- mysql 5.7.17 winx64安装配置图文教程
- JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
- 深入理解MySQL中的事务机制
- C# cmd中修改显示(显示进度变化效果)的方法
- java发送heartbeat心跳包(byte转16进制)
- JSQL 批量图片切换的实现代码
- jquery 点击元素后,滚动条滚动至该元素位置的方法
- Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
- Android JSON数据与实体类之间的相互转化(GSON的用法)
- 深入了解网络蠕虫
- Java输入字母来判断星期几的实现代码
- 深入分析安卓(Android)中的注解
- ASP.NET中基于soaphead的webservice安全机制
- jQuery判断网页是否已经滚动到浏览器底部的实现方法
- 易语言打开文件对话框时不允许用户指定一个不存在的文件