首页 > 特效插件 > 图像特效 >  uni-app利用Exif.js读取相册照片拍摄的经纬度和时间--izExif.js正文

uni-app利用Exif.js读取相册照片拍摄的经纬度和时间--izExif.js

特效介绍

最近在用uni-app开发一款旅游app,客户要求能够通过选择相册,读取照片的经纬度和地址。我知道Exif.js可以,但是它并没有针对app进行单独的改造,好在我找到了官方插件库里有,点击下载izExif.js

先来看下实现的效果:

uni-app Exif.js


使用方法

1、下载izExif.js,解压,将里面的js放入自己的项目中


2、引入方法:

import {getImageData, getFloatLocationByExif}  from '@/common/izExif.js'


3、选择照片,调用getImageData获得照片的EXIF信息,同时调用getFloatLocationByExif获取经纬度,再调用百度逆地址解析解析接口解析经纬度获取中文地址:

uni.chooseImage({
  count: 1,
  sourceType: ['album'],
  // 这里不要压缩,否则可能得不到EXIF信息
  sizeType: ['original'],
  success: (res) => {
    // uni.$app 为我爱模板网封装的公共方法
    uni.$app.showLoading('获取照片信息中...')
    uni.saveFile({
        tempFilePath: res.tempFilePaths[0],
        success: function (file) {
        // 调用izExif的方法,解析照片的EXIF信息
        getImageData(file.savedFilePath).then(res=>{
          // 得到拍摄时间
          tempAddress.time = res.exif.DateTime
          // 调用izExif的方法,解析照片的EXIF信息里的经纬度
          const lnglat = getFloatLocationByExif(res.exif)
          if(lnglat === null) {
            uni.$app.hideLoading()
            uni.$app.showToast('此照片没有位置信息!')
            return
          }
          tempAddress.latitude = lnglat.lat
          tempAddress.longitude = lnglat.lon
          // 调用ajax方法,传递经纬度,得到详细地址,百度逆地址解析解析接口的地址为:https://api.map.baidu.com/geocoder?location=纬度,经度&output=json
          uni.$app.ajax({
            api: uni.$api.getAddrByLatlng(lnglat.lon, lnglat.lat),
            showLog: true,
          }).then(res => {
            if(res.status === 'OK') {
              tempAddress.address = res.result.formatted_address
              addressModal.value.open()
            }
            uni.$app.hideLoading()
          })
        }).catch(e=>{
          console.log(e)
        })
        },
        fail: function (error) {
        console.log('存储失败', error)
        }
    })
  }
})


注意:上面的方法,貌似多此一举的用了uni.saveFile,这是因为如果直接读取相册,安卓10+的targetSdkVersion设置>=29会报错,相见:解决uni.chooseImage勾选相册原图,使用pathToBase64方法转Base64,提示“targetSdkVersion设置>=29后在Android10+系统设备不支持当前路径”的问题。重新保存,他就读取沙盒的照片了,就不会报这个错了。