不同端的图片旋转---Exif信息(可交换图像文件格式)

373 阅读2分钟

这几天,发现了一个现象,上传的相机拍摄的照片,在苹果手机,低版本一点的Chrome,

显示看似正常的图片,而在安卓端,火狐却发现图片逆时针旋转了90度,

经过一番查找发现问题的本质出在,图片的Exif信息。

引用百度百科:可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),

是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。

那么既然一张图片带了Exif信息,理论上表现都应该一样啊,为什么不同端会出现差异呢?

原因在于不同浏览器对于Exif信息是否会忽略,一些浏览器会直接忽略Exif里面的信息,

而像高版本的火狐浏览器以及安卓端就不会忽略。

因此造成了,一些端看起来图片发生了旋转,而一些端不会的现象。

火狐中支持一个新增的CSS属性image-orientation:这个属性是用来用来修正某些图片的预设方向。

不幸的是,这个新增的CSS属性,并没有受到大部分的浏览器的支持(连谷歌浏览器都不支持)。

所以想用这个属性来解决这个问题,并不可行。

一般情况下,如果说上传一张图片要在多个端进行展示的话,

需要考虑在多个端进行处理,并且需要进行大量的版本判断,

这样子一个是代码冗余,一个是处理起来复杂,

既然这样,如果说图片在自己的系统中形成一个闭环的话,

就直接在上传的时候将图片进行处理,如果说图片是带有Exif信息的话

就在用Canvas进行图片转换格式,转换成不带Exif信息的,需要注意的是,

需要考虑图片orientation的方向,然后将图片的旋转过来,再进行上传保存。