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

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

下面有个例子,能够参考:浏览器

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

打开能够看到是竖图。spa

 

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

你会发现这图自己实际上是个横图。blog

 

 

本人对于图形学彻底没有研究,在咨询了一位图形学博士后获得了答案,原来是由于相机给图片的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

 

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

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

 

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

 

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

 

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

 

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

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

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

 

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

 

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

相关文章
相关标签/搜索