当前位置: 首页 > news >正文

Exif.js获取手机拍摄照片的经纬度

概述

最近有个需求用户上传照片,并获取到照片拍摄时候的位置。网上搜索了相关资料,找到了Exif.js。本文就分享一下我的实验结果和实现。

分析

实现这样的一个需求有两种方式:

  1. 强制用户拍照,拍完照片后获取当前的位置作为拍摄照片时候的位置;
  2. 从相册选择照片,再获取照片的位置信息。

结论

快速的用uni-app搭了一个工程,试了下,结论是:

  1. 在安卓手机中拍摄的照片可以获取到,可以支持选择和拍摄两种方式;
  2. 在苹果手机中获取不到,只能拍摄。

实现

测试代码很简单,添加了一个按钮,点击按钮的时候选择照片,再将所有的信息打印输出。

<template><view class="content"><button @click="chooseImage">chooseImage</button><img style="width: 100%;" :src="imageUrl" id="image"></img></view>
</template><script>export default {data() {return {imageUrl: ''}},methods: {chooseImage() {const that = thisuni.chooseImage({count: 1, //最多可以选择的图片张数,默认9sizeType: ['original'], //original 原图,compressed 压缩图,默认二者都有sourceType: ['album', 'camera'],//album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项success: (res) => { //成功返回的函数that.imageUrl = res.tempFilePaths[0]console.log('图片路径为:', res.tempFilePaths[0]) //选着的图片const img1 = new Image()img1.src = res.tempFilePaths[0]img1.onload = () => {EXIF.getData(img1, function() {const allMetaData = EXIF.getAllTags(this);console.log(allMetaData)});}},fail: (err) => { //图片接口调用失败的回调函数	console.log('chooseImage fail', err)}})}}}
</script>

安卓手机中getAllTags返回的数据如下:

{"undefined": "Redmi Note 12 Pro","ImageHeight": 2448,"Make": "Xiaomi","Orientation": 1,"DateTime": "2025:08:02 12:29:54","GPSInfoIFDPointer": 4677,"YResolution": 72,"XResolution": 72,"ImageWidth": 3264,"Model": "22101316C","Software": "MediaTek Camera Application","ImageDescription": "","YCbCrPositioning": 2,"ExifIFDPointer": 501,"ResolutionUnit": 2,"ExifVersion": "","ExposureBias": 0,"ExposureProgram": "Not defined","ColorSpace": 1,"MaxApertureValue": 2,"PixelYDimension": 2448,"BrightnessValue": 7,"DateTimeOriginal": "2025:08:02 12:29:54","FlashpixVersion": "0100","SubsecTimeOriginal": "850","WhiteBalance": "Auto white balance","InteroperabilityIFDPointer": 4934,"ExposureMode": 0,"ExposureTime": 0.019996,"Flash": "Flash did not fire, compulsory flash mode","SubsecTime": "850","FNumber": 2.2,"PixelXDimension": 3264,"ISOSpeedRatings": 329,"ComponentsConfiguration": "YCbCr","FocalLengthIn35mmFilm": 16,"SubsecTimeDigitized": "850","DigitalZoomRation": 1,"DateTimeDigitized": "2025:08:02 12:29:54","ShutterSpeedValue": 2.321,"MeteringMode": "CenterWeightedAverage","FocalLength": 1.66,"SceneCaptureType": "Standard","LightSource": "Other","GPSLatitude": [22,33,4.9248],"GPSAltitude": 0,"GPSLatitudeRef": "N","GPSSpeed": 0,"GPSAltitudeRef": 0,"GPSProcessingMethod": "network","GPSSpeedRef": "K","GPSVersionID": "2.2.0.0","GPSLongitudeRef": "E","GPSTimeStamp": [4,29,54],"GPSLongitude": [113,52,38.352],"GPSDateStamp": "2025:08:02","thumbnail": {"YResolution": 72,"Orientation": 1,"Compression": 6,"JpegIFOffset": 5155,"JpegIFByteCount": 27648,"XResolution": 72,"undefined": "2025:08:02 12:29:54","YCbCrPositioning": 2,"ResolutionUnit": 2,"blob": {}}
}

数据中GPSLatitudeGPSLongitude即为返回的经纬度,格式为度、分、秒,可根据需要进行转换。

http://www.xdnf.cn/news/1297981.html

相关文章:

  • 风电功率预测实战:从数据清洗到时空建模​​
  • 机器翻译:回译与低资源优化详解
  • C# 高并发处理方式
  • 【每天一个知识点】生物的数字孪生
  • 如何选择适合工业场景的物联网网关?
  • TWINCAT+COPLEY ethercat配置
  • week1-[分支嵌套]公因数
  • Cherryusb UAC例程对接STM32 SAI播放音乐和录音(上)=>SAI+TX+RX+DMA的配置与音频回环测试
  • C++:浅尝gdb
  • 云计算-Docker Compose 实战:从OwnCloud、WordPress、SkyWalking、Redis ,Rabbitmq等服务配置实例轻松搞定
  • Mybatis学习笔记(七)
  • 《疯狂Java讲义(第3版)》学习笔记ch4
  • 分享10个ai生成ppt网站(附ai生成ppt入口)
  • 智慧工地从工具叠加到全要素重构的核心引擎
  • 跨域及解决方案
  • AI搜索重构下的GEO优化服务商格局观察
  • 一致性哈希Consistent Hashing
  • DAY 42 Grad-CAM与Hook函数
  • JS 解构赋值语法
  • 【OpenCV】Mat详解
  • docker compose部署mysql
  • 面试题之项目中灰度发布是怎么做的
  • 深入了解linux系统—— 线程概念
  • ZigBee入门与提高(3)—— ZigBee协议初识
  • Visual Studio2019/2022离线安装完整教程(含闪退解决方法)
  • Windows bypassUAC 提权技法详解(一)
  • 基于FPGA的8PSK+卷积编码Viterbi译码通信系统,包含帧同步,信道,误码统计,可设置SNR
  • Python之Django使用技巧(附视频教程)
  • HTML <link rel=“preload“>:提前加载关键资源的性能优化利器
  • 企业智脑正在构建企业第二大脑,四大场景引擎驱动数字化转型新范式