当前位置: 首页 > Web前端 > HTML

前端获取图片exif流信息

时间:2023-04-02 17:39:16 HTML

如果想获取exif解析后的信息,可以看这篇文章前端获取图片exif信息,通过exif-js获取。看到这里你会愣住,我为什么要再写一遍。emmmmm。。。因为我的需求变了,直接把exif部分的数据拿过来,然后base64提交。(giao)测试地址什么是exif可交换图像文件格式(英文:Exchangeableimagefileformat,官方简称Exif),专为数码相机照片而设,可以记录数码照片的属性信息和拍摄数据。exif格式规则Exif信息以0xFFE1开头,最后两个字节表示Exif信息的长度。所以Exif信息最大为64kb,而内部是TIFF格式。基于这样的规则,我想得到exif信息的字符串其实很简单。伪代码实现,反正跑不了//获取开始标签ffe1_idx=blob.indexOf('ffe1');//截取最后两个字节作为长度exifLength=blob.slice(ffe1_idx,ffe1_idx+2)//拦截exifexif=blob.slice(ffe1_idx,ffe1_idx+exifLength)//将exif处理成base64btoa(exif),实现exif获取和base64编码。我基于exif.js并使用其内部错误控制。判断类型因为exif是用来记录数码照片的属性信息和拍摄数据的,需要是JPEGif((dataView.getUint8(0)!=0xFF)||(dataView.getUint8(1)!=0xD8)){安慰。log("不是有效的JPEG");return{state:1001,message:'notavalidjpeg'};}找到Exif标志。我们介绍过Exif信息以0xFFE1开头。于是我们直接找这个信息解析Uint8中的arrayBuffer数据,显示Array.from(newUint8Array(temp1)).map(v=>[v,v.toString(16).padStart(2,'0'),String.fromCharCode(v)])varoffset=2,//前两位是类型标记,所以skiplength=file.byteLength,//文件长度标记;while(offsetv.toString(16)).join(''),16)+start-2返回{状态:1000,数据:btoa(Array.from(newUint8Array(file.buffer.slice(_start,_end))).map(v=>String.fromCharCode(v)).join(''))}}微信公众号:前端立农欢迎大家关注我的公众号。有问题也可以加我的微信前端交流群。