parseImage(data){
// data为ArrayBuffer类型的JPG文件的二进制数据
let arr=new Uint8Array(data);
let base=0; // TIFF数据头开始地址
let timeTagIndex=0; // EXIF时间信息标记开始地址
for(let i=0;i<arr.length;i++){
// 获取TIFF数据头地址
if(arr[i]==69 && arr[i+1]==120 && arr[i+2]==105 && arr[i+3]==102 && arr[i+4]==0 && arr[i+5]==0){
base=i+6;
}
// 获取时间标签地址
if(arr[i]==0x90 && arr[i+1]==0x03){
timeTagIndex=i;
break; // 因为这个if的条件比较容易重复,但是我们要的是第一个,所以这里就可以直接退出了
}
}
let bias_str="0x"; // 偏移地址
for(let i=0;i<=3;i++)
bias_str+=arr[timeTagIndex+8+i].toString(16);
let datetime_addr_index=base+parseInt(bias_str); // 实际地址
let datetimestr=""; // 日期字符串
for(let i=datetime_addr_index;i<=datetime_addr_index+19;i++){
datetimestr+=String.fromCharCode(arr[i]);
}
return datetimestr; // 接着,我们可以将日期字符串进行一定的字符串和日期时间处理,以满足需要
}
// data为ArrayBuffer类型的JPG文件的二进制数据
let arr=new Uint8Array(data);
let base=0; // TIFF数据头开始地址
let timeTagIndex=0; // EXIF时间信息标记开始地址
for(let i=0;i<arr.length;i++){
// 获取TIFF数据头地址
if(arr[i]==69 && arr[i+1]==120 && arr[i+2]==105 && arr[i+3]==102 && arr[i+4]==0 && arr[i+5]==0){
base=i+6;
}
// 获取时间标签地址
if(arr[i]==0x90 && arr[i+1]==0x03){
timeTagIndex=i;
break; // 因为这个if的条件比较容易重复,但是我们要的是第一个,所以这里就可以直接退出了
}
}
let bias_str="0x"; // 偏移地址
for(let i=0;i<=3;i++)
bias_str+=arr[timeTagIndex+8+i].toString(16);
let datetime_addr_index=base+parseInt(bias_str); // 实际地址
let datetimestr=""; // 日期字符串
for(let i=datetime_addr_index;i<=datetime_addr_index+19;i++){
datetimestr+=String.fromCharCode(arr[i]);
}
return datetimestr; // 接着,我们可以将日期字符串进行一定的字符串和日期时间处理,以满足需要
}