简介:
EXIF是用来记录拍摄图像的各种信息的属性。 最初由日本电子工业发展协会(JEIDA --Japan Electronic Industry Development Association) 制订,目前的最新版本是2.21 版。国际标准化组织(ISO)正在制订的相机文件设计标准(DCF -- Design role for Camera File system)可能以Exif2.1为基础。
EXIF文件实际上JPGE的一种,遵从JPGE标准,只是在文件头之中增加了拍摄信息和索引图,所以可以使用任意的查看JPGE的工具来对EXIF文件进行修改,但是打开之后可能看不到EXIF信息,一旦修改很有可能会找成信息丢失。
简单来说,EXIF 信息就是由数码相机在拍摄过程中采集一系列的信息,然后把信息放置在我们熟知的 JPEG/TIFF 文件的头部, 也就是说 EXIF 信息是镶嵌在 JPEG/TIFF 图像文件格式内的一组拍摄参数,主要包括摄影时的光圈、快门、ISO、日期时间等各种与当时摄影条件相关的讯息,相机品牌型号,色彩编码,拍摄时录制的声音以及全球定位系统(GPS)等信息。
JS相关:
我们在JS之中如何取获取EXIF文件的信息呢,可以使用exif.js来进行文件解析。
EXIF 数据主要来自拍摄的照片,多用于移动端开发,PC 端也会用到,此插件兼容主流浏览器,IE10 以下不支持。
exif.js提供解析和获取API。当我们在页面上引入exif之后,我们可以直接使用EXIF变量来进行调用。
-- EXIF.getData(image, function),其中第一个参数是IMAGE对象内容,function为回掉函数,这一函数的作用是获取图像的数据,并且能兼容尚未支持提供 EXIF 数据的浏览器获取到元数据。
-- 获取了图像数据之后,我们可以使用EXIF.getTag(img, tag)来获取我们需要的EXIF属性数据,其中第一个参数是获取的图像数据,第二个参数是我们想要获取的属性的名称,传递的是一个字符串内容。
当然EXIF-js的内容不仅仅只是上面说的这些内容,点击查看详情。
注意事项:
在实际运用的过程之中,有时候我们需要上传相关的照片内容。而由于当前的照片内容实际上常常较大,所以我们需要进行压缩处理,这是就会发生错误,上传的图片内容在服务端获取之后展示为原图片旋转90度的效果。
针对于IOS端:原因--由于目前的手机拍照基本都在2M以上,而ios中只要超过2M图片就会自动旋转。拍照后直接取出来的UIimage(用UIImagePickerControllerOriginalImage取出),它本身的imageOrientation属性是3,即UIImageOrientationRight。如果这个图片直接使用则没事,但是如果对它进行裁剪、缩放等操作后,它的这个imageOrientation属性会变成0。此时这张图片用在别的地方就会发生旋转。imageOrientation是只读的,不能直接修改其值。
解决--在获取原照片的之后通过exif.js先获取当前图片的oritention的值,然后在,通过判别这一属性值的内容,来将压缩之后的图片进行旋转,保证图片展示正确,之后再上传到服务器端。这样一来展示的内容将会修改正确。
针对于Android:暂时未发现这一类问题。
针对APICloud这一类H5转成的app:暂定