获取照片的设备等信息(解析照片数据)-- 非正常获取

奇怪的需求

parseImgDataInfo 传输 blob对象即可

//newData 传输 blob对象
    async parseImgDataInfo(newData) {
      try {
        const fileBase64 = await onFileBase64(newData);
        const exifInfo = await getExifInfo(fileBase64);
        this.longitude = exifInfo.lon;
        this.latitude = exifInfo.lat;
        this.datetime = exifInfo.datetime;
        this.mobile= exifInfo.mobile;
        return;
      } catch (e) {
        console.log("e:", e);
      }
    },

exif.js 包

import EXIF from "@/static/JS/exif.js";
  
// 文件流转base64
  onFileBase64 (eventBlob) {
    return new Promise((resolve, reject) => {
      if (!!eventBlob) {
        let file = eventBlob;
        let reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = () => {
          resolve(reader.result)
        };
      } else {
        reject('图片数据为空')
      }
    })
  },
  // 查询图片文件流中的信息 H5使用
  getExifInfo (imgSrc) {
    return new Promise((resolve, reject) => {
      if (!imgSrc) {
        reject('请先选择图片')
        return;
      }
      let imgData = {
        datetime: null,
        mobile: null,//设备型号
        lon: null,
        lat: null,
        code: true,
        msg: ""
      }
      const img = new Image();
      img.src = imgSrc;
      img.onload = () => {
        console.log('图片加载');
        EXIF.getData(img, () => {
          let tags = EXIF.getAllTags(img);
          imgData.datetime = tags.DateTimeDigitized;
          const lon = EXIF.getTag(img, 'GPSLongitude'); // 经度
          const lat = EXIF.getTag(img, 'GPSLatitude'); // 纬度
          const make = EXIF.getTag(img, 'Make');
          const model = EXIF.getTag(img, 'Model');
          if (make && model) {
            imgData.mobile = `${make} ${model}`;
          }
          if (lon && lat) {
            // 计算出经纬度并保留6位小数
            imgData.lon = (lon[0] + lon[1] / 60 + lon[2] / 3600).toFixed(6);
            imgData.lat = (lat[0] + lat[1] / 60 + lat[2] / 3600).toFixed(6);
            resolve(imgData)
          } else {
            imgData.code = false
            imgData.msg = '没有地理信息'
            resolve(imgData)
          }
        });
      };
    })
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值