原理——元数据

通过提取jpg格式图片中携带的元数据获得gps的信息,再通过调用地图openApi将经纬信息反解析为对应的实际地理位置。

测试小程序在这里

必备工具

1.微信小程序的云函数
2.腾讯地图open-api
3.nodejs 基础语法
4.exifreader nodejs moudle

背景

手机相机设置中,默认开了gps位置信息。这是一切的出发点,至于为什么会默认开启这里不是我们讨论的点。除了gps的信息以外,还有机型信息,以及如下信息 请查看文末的表格

识别成功前提

  • 你的图片必须是原图,使用手机的前置摄像头拍摄
  • 相机设置中必须开启gps 信息
  • 如果不是自己的图片,请确保对方在发送图片时勾选了原图选项

为了获得包含了gps元数组的图片的条件还是蛮苛刻的,例如在拍摄的过程中,gps定位未开启,或者gps信息弱,等情况此时就不会存在gps的信息,不过拍摄时间还是有的,所以可以确定拍摄图片时的手机时间。又或者使用了美拍,美图秀秀,b613…这些三方的摄像头,都不会携带元数据。如果未选择原图传送,经过聊天软件的压缩之后,原本携带的元数据也将丢失。所以别指望通过什么朋友圈图片得到地址信息。

核心代码

//使用npm install 安装 exifreader 模块
import ExifReader from 'exifreader'
//此处使用的腾讯地图的 sdk JavaScript版本,请自行到官网下载
import QQMapWX from 'qqmap-wx-jssdk.js'
const tags = ExifReader.load(filedata.fileContent, { expanded: true })
//经纬度
let GPSLatitude = tags.exif.GPSLatitude.description
let GPSLongitude = tags.exif.GPSLongitude.descriptionlet local = qqmapsdk.reverseGeocoder({location: {latitude: GPSLatitude ,longitude: GPSLongitude },coord_type: 1,success: (data) => {//这里你将获得地址反解析的数据},fail: console.error,complete: console.log,sig: '签名'})

总结

只对技术评论:这个并不是什么黑科技。


更新

  • 2021年6月21日 新增map展示页面,新增一键复制源数据功能。
  • 2021年9月30日 微信云函数变更,目前功能已无法使用

附件

EXIF 标识

标识 说明
ExifVersion Exif 版本
FlashPixVersion FlashPix 版本
ColorSpace 色域、色彩空间
PixelXDimension 图像的有效宽度
PixelYDimension 图像的有效高度
ComponentsConfiguration 图像构造
CompressedBitsPerPixel 压缩时每像素色彩位
MakerNote 制造商设置的信息
UserComment 用户评论
RelatedSoundFile 关联的声音文件
DateTimeOriginal 创建时间
DateTimeDigitized 数字化创建时间
SubsecTime 日期时间(秒)
SubsecTimeOriginal 原始日期时间(秒)
SubsecTimeDigitized 原始日期时间数字化(秒)
ExposureTime 曝光时间
FNumber 光圈值
ExposureProgram 曝光程序
SpectralSensitivity 光谱灵敏度
ISOSpeedRatings 感光度
OECF 光电转换功能
ShutterSpeedValue 快门速度
ApertureValue 镜头光圈
BrightnessValue 亮度
ExposureBiasValue 曝光补偿
MaxApertureValue 最大光圈
SubjectDistance 物距
MeteringMode 测光方式
Lightsource 光源
Flash 闪光灯
SubjectArea 主体区域
FocalLength 焦距
FlashEnergy 闪光灯强度
SpatialFrequencyResponse 空间频率反应
FocalPlaneXResolution 焦距平面X轴解析度
FocalPlaneYResolution 焦距平面Y轴解析度
FocalPlaneResolutionUni t 焦距平面解析度单位
SubjectLocation 主体位置
ExposureIndex 曝光指数
SensingMethod 图像传感器类型
FileSource 源文件
SceneType 场景类型(1 == 直接拍摄)
CFAPattern CFA 模式
CustomRendered 自定义图像处理
ExposureMode 曝光模式
WhiteBalance 白平衡(1 == 自动,2 == 手动)
DigitalZoomRation 数字变焦
FocalLengthIn35mmFilm 35毫米胶片焦距
SceneCaptureType 场景拍摄类型
GainControl 场景控制
Contrast 对比度
Saturation 饱和度
Sharpness 锐度
DeviceSettingDescription 设备设定描述
SubjectDistanceRange 主体距离范围
InteroperabilityIFDPointer
ImageUniqueID 图像唯一ID

Tiff 相关

标识 说明
ImageWidth 图像宽度
ImageHeight 图像高度
BitsPerSample 比特采样率
Compression 压缩方法
PhotometricInterpretation 像素合成
Orientation 拍摄方向
SamplesPerPixel 像素数
PlanarConfiguration 数据排列
YCbCrSubSampling 色相抽样比率
YCbCrPositioning 色相配置
XResolution X方向分辨率
YResolution Y方向分辨率
ResolutionUnit 分辨率单位
StripOffsets 图像资料位置
RowsPerStrip 每带行数
StripByteCounts 每压缩带比特数
JPEGInterchangeFormat JPEG SOI 偏移量
JPEGInterchangeFormatLength JPEG 比特数
TransferFunction 转移功能
WhitePoint 白点色度
PrimaryChromaticities 主要色度
YCbCrCoefficients 颜色空间转换矩阵系数
ReferenceBlackWhite 黑白参照值
DateTime 日期和时间
ImageDescription 图像描述、来源
Make 生产者
Model 型号
Software 软件
Artist 作者
Copyright 版权信息

GPS相关

标识 说明
GPSVersionID GPS 版本
GPSLatitudeRef 南北纬
GPSLatitude 纬度
GPSLongitudeRef 东西经
GPSLongitude 经度
GPSAltitudeRef 海拔参照值
GPSAltitude 海拔
GPSTimeStamp GPS 时间戳
GPSSatellites 测量的卫星
GPSStatus 接收器状态
GPSMeasureMode 测量模式
GPSDOP 测量精度
GPSSpeedRef 速度单位
GPSSpeed GPS 接收器速度
GPSTrackRef 移动方位参照
GPSTrack 移动方位
GPSImgDirectionRef 图像方位参照
GPSImgDirection 图像方位
GPSMapDatum 地理测量资料
GPSDestLatitudeRef 目标纬度参照
GPSDestLatitude 目标纬度
GPSDestLongitudeRef 目标经度参照
GPSDestLongitude 目标经度
GPSDestBearingRef 目标方位参照
GPSDestBearing 目标方位
GPSDestDistanceRef 目标距离参照
GPSDestDistance 目标距离
GPSProcessingMethod GPS 处理方法名
GPSAreaInformation GPS 区功能变数名
GPSDateStamp GPS 日期
GPSDifferential GPS 修正

通过图片识别定位拍摄地点——微信小程序相关推荐

  1. 图片识别不了小程序怎么办_图片转文字【微信小程序】

    文字识别小程序在文章的底部 直接拉到文章底部就可使用 ↓↓↓↓↓↓ 工作中,很多时间需要把纸质文稿上的大段文字变成可编辑文字,有时我们会一个一个文字录入,有时我们可以采用扫描仪,我们也用过扫描全能王A ...

  2. uni微信小程序 下载图片跟文字_微信小程序:图片与文字无法居中 最后解决的方法是——...

    最近做小程序,需要用到flex布局,发现垂直居中是用:vertical-align:middle或者line-height 后来发现这2个都不能完全实现图片与文字居中,这可怎么办? 大图片 我给sta ...

  3. 微信图片 自动上传到服务器,微信小程序怎样使图片上传至服务器

    这次给大家带来微信小程序怎样使图片上传至服务器,微信小程序使图片上传至服务器的注意事项有哪些,下面就是实战案例,一起来看一下.-wxml 发布项目 /**选择图片 */ choose: functio ...

  4. java drawimage图片不完整_微信小程序canvas.drawImage完全显示图片问题的解决

    问题描述 问题产生 对于微信小程序,canvas处理过程中,dramImage默认图片引用是有残缺的 导入初始项目 打开链接(原官网例子),浏览器唤醒微信开发这工具,打开连接之前需要下载好微信开发者工 ...

  5. 基于ibeacon蓝牙定位(微信小程序)

    前段时间做定位,查了很多资料,最后感觉ibeacon做定位比较简单,主要微信小程序有对应的接口所以非常简单.需要的硬件ibeacon,这个硬件在淘宝都有,简单的定位一个就可以,复杂就需要根据需求购买了 ...

  6. Slog71_选取、上传和显示本地图片GET !(微信小程序之云开发-全栈时代3)

    ArthurSlog SLog-71 Year·1 Guangzhou·China Sep 12th 2018 ArthurSlog Page GitHub NPM Package Page 掘金主页 ...

  7. android分享分享到朋友圈图片,android app分享微信小程序(包含封面网络图片)+图片到朋友圈...

    A 分享微信小程序效果: image.png 实现代码 //第一步通过url拿网络图片并生成bitmap val path = "分享小程序某个界面包含传参数" if (!Text ...

  8. 小程序背景图片从服务器获取,微信小程序button控件去边框、加背景图

    button边框去除 相信大家开发微信小程序时使用button会遇到一些与预期效果不同的样式问题.例如button的边框无法去除,在为button设置圆角的时候周围会有一些"杂质" ...

  9. 微信小程序识别图片并提取文字_分享一个 OCR 文字识别,高效图片转文字的微信小程序...

    从白描 App 上线那天起,就一直有人问有没有小程序,我们一直的回答就是:不好意思,暂时没有计划.那从今天开始,就应该回答:去微信里搜索「白描取字扫描」小程序来免费使用吧! 为什么不叫「白描」?当然想 ...

最新文章

  1. C#和Unity游戏开发者大师班2021 (2D,3D和FPS)
  2. linux安装 ”NTFS“ 文件系统
  3. 取得COM对象的UUID并以string输出
  4. 新地王的诞生终将付出惨痛的代价?
  5. 云原生不仅颠覆了技术栈,背后的每个岗位也在悄然发生改变
  6. Gitlab禁用Gravatar头像
  7. 拆分-洛谷P2745 [USACO5.3]窗体面积Window Area
  8. Windows10 64位 安装 Postgresql 数据库
  9. SQLite第九课 sqlite3_set_authorizer案例
  10. 栈和队列常用函数详解
  11. Ubuntu16.04 CPU压力测试
  12. JS中var、let以及const关键字到底怎么用?
  13. [我是面试官系列]如何判断一个人的执行力?
  14. 华为服务器显示灯p02,华为服务器uid灯蓝色
  15. Android开发学习持续更新中
  16. unity黑白滤镜_unity3D 把图片变黑白的Shader
  17. C语言程序设计——用户密码输入与判断
  18. 怎么修改电脑或者Apple手机、iPad等设备上图标的大小
  19. how to build sailfish-office(cmake mb2/sb2)
  20. 计算机专业符合直招士官吗,直招士官报名开始,这些专业可报名,你的专业符合吗?...

热门文章

  1. 【C语言】随机数函数rand和srand
  2. 这老铁教你如何制作亮眼简厉!!
  3. Flutter组件学习(13)层叠布局Stack、Positioned
  4. 计算机用户凭据删除,win8系统如何删除保存的共享凭据(用户名和密码)
  5. 微信小程序连接华为云ModelArts的方法以及一些小坑(一)
  6. python数学建模--线性规划问题案例及求解
  7. Serverlet 介绍
  8. 【JS】日期Date如何格式化为年月日yyyy-MM-dd hh:mm:ss
  9. linux认证版本,LPI Linux认证考试教程 中文PDF最新版
  10. 假设检验和P值那些事