点击关注公众号,Python干货及时送达
PyCharm操作手册,点击获取
『老公,我今晚和闺蜜去做指甲,你下班自己吃饭,乖乖等我哦。』 小阿B的手机上跳出了女朋友这样一条微信,随后发了一张自拍照。
小阿B,放下了手中的代码。快速的回复到「好的,路上注意安全,我还有几个bug要改得加班一会」

小阿B继续改着Bug,突然有一种莫名其妙的感觉,似乎哪里不对劲,女朋友不是前阵子刚做的指甲吗?难道是...

小阿B随手创建了一个py
文件,撸了一段代码。
看到执行结果在某商务酒店,小阿B的心都碎了。。

如何获取女朋友的位置呢?
怎么获取到女朋友的地址呢,这一切都要从那张照片说起。任何智能手机拍摄照片时,都含有Exif参数,调用GPS全球定位系统,在照片中记录位置、时间等信息。无论是通过微信、QQ、邮箱、短信等对照片进行传输时,都会附带这些信息一并发送。
不过朋友圈的图片不会携带这些信息,因为发送朋友圈时,图片会被自动压缩
“如何避免这种信息泄露呢,一方面不发送原图,另一方面可以关闭定位。还有一个就是P完再发图
”
说到这,在Python中有一个叫exifread
的库,通过这个库就可以获取到图片信息,当然呢 也包括经纬度
pip intsall exifread
用法也比较简单,直接如下所示
f = open('pic.jpeg', 'rb')
tags = exifread.process_file(f)
如上代码会返回一个图片信息的对象,其中我们用到的字段有
exifread返回的经纬度是一个类似列表的数据结构。通过对返回的经纬度数据进行处理得到6位小数的经纬度坐标值
# 最后一个元素单独处理
last = int(lst[-1]) / 3600
new_x = lst[0].num + lst[1].num / 60 + last / 3600
return '%.6f' % new_x
这样我们就获取到了详细经纬度值,然后通过调用高德地图的API,当然你也可以使用百度地图、谷歌地图的API
按照API文档配置拼接相关参数,发送请求,就可以获得详细的位置信息了
地址参考:https://lbs.amap.com/api/webservice/guide/api/georegeo/

必要参数如下:
- key:高德地图Web服务api的key值,可以自己申请(免费的)
- location:内容规则,经度在前,纬度在后,用
,
连接 - output:返回数据类型格式,为了方便处理,设置为json
于是最终我的请求URL为
https://restapi.amap.com/v3/geocode/regeo?output=json&key={key}&location={lat},{lng}
最终,传入参数,发送请求。通过解析响应的Json,就可以获取到图片的拍摄时间和拍摄地点了。
url = f'https://restapi.amap.com/v3/geocode/regeo?output=json&key={key}&location={lat},{lng}'
response = requests.get(url)
address = ''
if response.status_code == 200:
resp_json = response.json()
print(resp_json)
address = resp_json['regeocode']['formatted_address']
return address
关于如何通过Python获取到图片的详细信息,写起来也是比较简单。另外一方面,如果没有必要,大家可以关闭手机上的位置信息。这样别人就不会通过照片获取你的一些隐私信息啦~
完整源代码可以在「Python极客专栏」公众号后台回复「pic」获取。
最后,小伙伴们可以给下面的视频来个三连(点赞+收藏+评论/转发)支持一下(或者点击阅读原文观看)
