这几天,发现了一个现象,上传的相机拍摄的照片,在苹果手机,低版本一点的Chrome,
显示看似正常的图片,而在安卓端,火狐却发现图片逆时针旋转了90度,
经过一番查找发现问题的本质出在,图片的Exif信息。
引用百度百科:可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),
是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。
那么既然一张图片带了Exif信息,理论上表现都应该一样啊,为什么不同端会出现差异呢?
原因在于不同浏览器对于Exif信息是否会忽略,一些浏览器会直接忽略Exif里面的信息,
而像高版本的火狐浏览器以及安卓端就不会忽略。
因此造成了,一些端看起来图片发生了旋转,而一些端不会的现象。
火狐中支持一个新增的CSS属性image-orientation:这个属性是用来用来修正某些图片的预设方向。
不幸的是,这个新增的CSS属性,并没有受到大部分的浏览器的支持(连谷歌浏览器都不支持)。
所以想用这个属性来解决这个问题,并不可行。
一般情况下,如果说上传一张图片要在多个端进行展示的话,
需要考虑在多个端进行处理,并且需要进行大量的版本判断,
这样子一个是代码冗余,一个是处理起来复杂,
既然这样,如果说图片在自己的系统中形成一个闭环的话,
就直接在上传的时候将图片进行处理,如果说图片是带有Exif信息的话
就在用Canvas进行图片转换格式,转换成不带Exif信息的,需要注意的是,
需要考虑图片orientation的方向,然后将图片的旋转过来,再进行上传保存。