前言

本脚本主要是对JPG格式的图片收集其EXIF信息,获取GPS定位数据,并算出精准定位的GPS数据,通过百度地图API接口获取该GPS的详细位置,也可通过第三方GPS定位查询精准位置。

那么,什么是EXIF?

EXIF是可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。

Exif可以附加于JPEG、TIFF、RIFF等文件之中,为其增加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本信息。

Windows 7操作系统具备对Exif的原生支持,通过鼠标右键点击图片打开菜单,点击属性并切换到详细信息标签下即可直接查看Exif信息。

Exif信息是可以被任意编辑的,因此只有参考的功能。Exif信息以0xFFE1作为开头标记,后两个字节表示Exif信息的长度。所以Exif信息最大为64 kb,而内部采用TIFF格式。

利用该脚本,我们可以做什么?

其实博主写该脚本,目的是为了能够收集图片的GPS信息,达到GPS精准定位,收集详细信息。

如何使用?

Github项目地址:https://github.com/Wileysec/Photo_GPS

将该脚本下载到本地运行,需要安装Python模块 exifread requests

修改API配置

1
2
3
4
5
6
7
8
9
10
if accres['error'] == 0:
api = "http://api.map.baidu.com/reverse_geocoding/v3/?ak=你的百度地图AK密钥&output=json&coordtype=wgs84ll&location={0},{1}".format(accres['baidu']['lat'],accres['baidu']['lng'])
response = requests.get(api)
content = response.text
address = json.loads(content)
else:
api = "http://api.map.baidu.com/reverse_geocoding/v3/?ak=你的百度地图AK密钥&output=json&coordtype=wgs84ll&location={0},{1}".format(lat, lng)
response = requests.get(api)
content = response.text
address = json.loads(content)

将脚本中的 67 和 72 行的AK密钥换成你在百度地图申请的AK密钥

获取信息

由于EXIF附加在JPG图片格式中,所以图片原文件必须为JPG格式,且在拍照时已将EXIF信息写入到JPG图片中,否则获取不到任何信息。

这里,我在我的学校新生群拿到一张学生拍的录取通知书作为案例

先保存该图片为JPG图片,放到与脚本同级目录下

运行 python3 photo_gps.py 3.jpg,该脚本是在Python3下开发,请使用Python3运行该脚本

这样,我们就成功的获取了EXIF信息,并且获得了GPS信息

如果GPS信息为 该照片无GPS信息 则有可能该手机拍照时没有勾选将GPS信息写入图片选项。

如果给出的地址不够详细,可打开 http://map.yanue.net/gps.html 该地址,输入经纬度查询,亲测这个比较准,百度地图是有限制的不会精准到几米距离,而这个查询是可以精准到几米距离的。

总结

经过博主亲自测试,小米8手机有时候不会带EXIF信息,小米6X手机有时候会但是没有GPS信息,苹果手机不会带任何信息,华为 OPP0 VIVO都会带入EXIF信息,其他手机你们自测。

亲测QQ空间 微信朋友圈的图片是获取不到信息的,因为都进行了压缩,将EXIF信息全部删除了。但是QQ 微信传输时是不会压缩和删除的,就算发的不是原图也能获取到。

脚本好用记得给个 Star