这个问题是在用七牛上传图片后获取宽高时发现的,一张图片,用图片浏览器打开始终是竖图,可是查看属性或者用七牛获取宽高,却发现宽大于高,也就是在属性中这是个横图。这样致使客户端用该宽高来展现图片会出现问题。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 | 上 | 左 | 0° |
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°旋转的图,那就把宽高手动换一下,就能够了。