收藏
回答

ios,chooseMedia后的原图,如何能获取到EXIF信息(拍摄时间)?

希望能在chooseMedia后,获取到图片的拍摄时间,

mac开发调试的时候是可以获取的,但是iOS上就不行了。

是因为mac上调用的文件管理器,iOS用的苹果的控件,微信这边没有处理EXIF?

      wx.chooseMedia({
        mediaType:["image"],
        sourceType:["album"],
        sizeType:["original"], 
        success:onImageChoose
      })
//调用chooseMedia部分,



拿到image的tempPath后,用readFile读出,然后尝试获取exif

    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=0; // 偏移地址
      for(let i=0;i<=3;i++){
          bias=bias<<8;
          bias+=arr[timeTagIndex+8+i];
      }        
      let datetime_addr_index=base+bias; // 实际地址


      let datetimestr=""; // 日期字符串
      for(let i=datetime_addr_index;i<=datetime_addr_index+19;i++){
          datetimestr+=String.fromCharCode(arr[i]);
      }
      console.log(datetimestr)
      return datetimestr.replaceAll(':','/').split(" ")[0]
  }


mac上能够正常获取到exif的拍摄日期,

ios就没有了。

回答关注问题邀请回答
收藏

2 个回答

登录 后发表内容