图片Exif 信息中Orientation的理解和对此的处理

这个问题是在用七牛上传图片后获取宽高时发现的,一张图片,用图片浏览器打开始终是竖图,但是查看属性或者用七牛获取宽高,却发现宽大于高,也就是在属性中这是个横图。这样导致客户端用该宽高来展示图片会出现问题。

下面有个例子,可以参考:

1,图片地址是:http://7xt44n.com2.z0.glb.qiniucdn.com/exif.png

打开可以看到是竖图。

2,用七牛的api将所有额外信息去除,再看来这张图片:http://7xt44n.com2.z0.glb.qiniucdn.com/exif.png?imageMogr2/strip

你会发现这图本身其实是个横图。

本人对于图形学完全没有研究,在咨询了一位图形学博士后得到了答案,原来是因为相机给图片的exif信息加上了一个Orientation,然后图片浏览器会对这个属性做出兼容,让图片以竖图的形式显示出来。下面我来对Orientation这个属性做一些解释。

EXIF Orientation 参数让你随便照像但都可以看到正确方向的照片而无需手动旋转,这个参数有以下几个值:

EXIF Orientation Value Row #0 is: Column #0 is:
1 Top Left side
2 Top Right side
3 Bottom Right side
4 Bottom Left side
5 Left side Top
6 Right side Top
7 Right side Bottom
8 Left side Bottom

说实话这个表实在太难看懂了,即使是它变成中文:

参数 0行(未旋转上) 0列(未旋转左) 旋转(方法很多)
1
2 水平翻转
3 180°
4 垂直翻转
5 顺时针90°+水平翻转
6 顺时针90°
7 顺时针90°+垂直翻转
8 逆时针90°

满眼的上下左右真是看的眼花。网上流传的还有一张图示:

这张图里的数字 对应的就是表格里的数字。我来看着这个图用我自己的理解给大家解释一下,可能不标准,但是能助于你理解这个参数:

表格里的0行,你可以理解为你看到的旋转后(加上参数,被浏览器自动旋转)的图片的上方向,0列你可以理解为你看到的旋转后的图片的左方。而表格里没一行的数据,就是该方向对应的原来的图片的方向。

比如参数值1,0行是上,0列是左,意思也就是旋转后的上方是原图的上方,旋转后的左方是原图的左方;

参数值2,0行是上,0列是右,那就是旋转后的上方是原图的上方,旋转后的左方是原图的右方;

参数值8,0行是左,0列是下,那就是旋转后的上方是原图的左方,旋转后的左方是原图的下方;

这三个例子,配合着图片和表格,多看即便,总能理解这个参数的意思的。

下面要讲讲我的处理办法了。其实在移动端,图片库都会对这个参数做出兼容的,你只需要保证你的宽高不倒置,移动端就可以正常显示。所以我的处理办法就是图片上传完毕后,调用七牛的exif接口,获取exif信息,然后对Orientation进行判断,如果这个图片是一个90°旋转的图,那就把宽高手动换一下,就可以了。

时间: 2024-08-05 07:02:56

图片Exif 信息中Orientation的理解和对此的处理的相关文章

七牛:关于图片 EXIF 信息中旋转参数 Orientation 的理解

EXIF(Exchangeable Image File)是 “可交换图像文件” 的缩写,当中包含了专门为数码相机的照片而定制的元数据,可以记录数码照片的拍摄参数.缩略图及其他属性信息,简单来说,Exif 信息是镶嵌在 JPEG/TIFF 图像文件格式内的一组拍摄参数,需要注意的是 EXIF 信息是不支持 png,webp 等图片格式的. 对于七牛,可以在图片后面加? exif 参数来获取图片的 exif 信息. 对于 Orientation 参数,简单的说是记录图片拍摄的相机的旋转信息,浏览器

Android 图片Exif信息相关的获取与修改

1 Exif是什么 Exif是一种图像文件格式,它的数据存储于JPEG格式是完全相同的,实际上Exif格式就是JPEG格式头插入了 数码照片的信息,包括拍摄的光圈.快门.平衡白.ISO.焦距.日期时间等各种和拍摄条件以及相机品牌.型号.色彩编码以及GPS等.简单来 说,Exif=拍摄参数+JPED.因此,可以利用任何可以查看JPEG文件的看图软件浏览Exif信息,但是并不是所有图形程序都能处理Exif信息, 而自Android2.0之后,加入了对图片Exif数据的支持. 2 ExifInterf

(四十三)获取图片exif信息

1.什么是Exif Exif是一种图像文件格式,它的数据存储于JPEG格式是完全相同的,实际上Exif格式就是JPEG格式头插入了数码照片的信息,包括拍摄的光圈.快门.平衡白.ISO.焦距.日期时间等各种和拍摄条件以及相机品牌.型号.色彩编码以及GPS等.简单来说,Exif=拍摄参数+JPED.因此,可以利用任何可以查看JPEG文件的看图软件浏览Exif信息,但是并不是所有图形程序都能处理Exif信息,而自Android2.0之后,加入了对图片Exif数据的支持. 2.ExifInterface

python用来获得图片exif信息的库源码

将开发过程中重要的内容段收藏起来,下边内容是关于python用来获得图片exif信息的库的内容. # library test/debug function (dump given files)if __name__ == '__main__': import sys import getopt # parse command line options/arguments try: opts, args = getopt.getopt(sys.argv[1:], "hqsdt:v",

改动图片exif信息

我们先了解一下EXIF: EXIF能够附加于JPEG.TIFF.RIFF等文件之中.为其添加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本号信息. 全部的JPEG文件以字符串"0xFFD8"开头.并以字符串"0xFFD9"结束. 文件头中有一系列"0xFF?? "格式的字符串,称为"标识",用来标记JPEG文件的信息段."0xFFD8"表示图像信息開始."0xFFD9"表示图像信

修改图片exif信息

我们先了解一下EXIF: EXIF可以附加于JPEG.TIFF.RIFF等文件之中,为其增加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本信息. 所有的JPEG文件以字符串"0xFFD8"开头,并以字符串"0xFFD9"结束.文件头中有一系列"0xFF??"格式的字符串,称为"标识",用来标记JPEG文件的信息段."0xFFD8"表示图像信息开始,"0xFFD9"表示图像信息结束

图片Exif信息

Exif文件格式简述链接:https://www.zhihu.com/question/23727439/answer/25467748 可交换图像文件常被简称为Exif(Exchangeable image file format),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据. Exif最初由日本电子工业发展协会在1996年制定,版本为1.0.1998年,升级到2.1,增加了对音频文件的支持.2002年3月,发表了2.2版. Exif可以附加于JPEG.TIFF.RIF

Android 获取图片exif信息

使用android api读取图片的exif信息 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_p

C#读取图片Exif信息

Exif是可交换图像文件的缩写,是专门为数码相机的照片设定的,可以记录数码照片的属性和拍摄数据 ////调用 //string strFile="fffff.jpg";//文件名 //System.Drawing.Bitmap bmp = new Bitmap(strFile); //EXIF.EXIFextractor er = new EXIF.EXIFextractor(ref bmp, "\n"); //Console.Write(strFile + &qu