脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - 女友半夜加班发自拍 python男友用30行代码发现惊天秘密

女友半夜加班发自拍 python男友用30行代码发现惊天秘密

2021-12-22 00:29LexSaints Python

大家好,我是Lex 喜欢欺负超人那个Lex 女友说今晚加班,还给我发了一张照片? 我心生怀疑,就用python分析了一下照片,结果发现。。。 划重点:利用Python读取照片的GPS信息信息

事情是这样的

正准备下班的python开发小哥哥

接到女朋友今晚要加班的电话

并给他发来一张背景模糊的自拍照

如下 ↓ ↓ ↓

女友半夜加班发自拍 python男友用30行代码发现惊天秘密

敏感的小哥哥心生疑窦,难道会有原谅帽

女友半夜加班发自拍 python男友用30行代码发现惊天秘密

然后python撸了一段代码 分析照片

分析下来 emmm

女友半夜加班发自拍 python男友用30行代码发现惊天秘密

拍摄地址居然在 xxx酒店

小哥哥崩溃之余 大呼上当

女友半夜加班发自拍 python男友用30行代码发现惊天秘密

python分析照片

小哥哥将发给自己的照片原图下载下来

并使用python写了一个脚本

读取到了照片拍摄的详细的地址

详细到了具体的街道和酒店名称

引入exifread模块

首先安装python的exifread模块,用于照片分析

pip install exifread 安装exfriead模块

?
1
2
3
4
5
6
ps c:\windows\system32> pip install exifread
collecting exifread
  downloading exifread-2.3.2-py3-none-any.whl (38 kb)
installing collected packages: exifread
successfully installed exifread-2.3.2
ps c:\windows\system32> pip install json

gps经纬度信息

其实我们平时拍摄的照片里,隐藏了大量的私密信息

包括 拍摄时间、极其精确 具体的gps信息。

下面是通过exifread模块,来读取照片内的经纬度信息。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#读取照片的gps经纬度信息
def find_gps_image(pic_path):
    gps = {}
    date = ''
    with open(pic_path, 'rb') as f:
        tags = exifread.process_file(f)
        for tag, value in tags.items():
            #纬度
            if re.match('gps gpslatituderef', tag):
                gps['gpslatituderef'] = str(value)
            #经度
            elif re.match('gps gpslongituderef', tag):
                gps['gpslongituderef'] = str(value)
            #海拔
            elif re.match('gps gpsaltituderef', tag):
                gps['gpsaltituderef'] = str(value)
            elif re.match('gps gpslatitude', tag):
                try:
                    match_result = re.match('\[(\w*),(\w*),(\w.*)/(\w.*)\]', str(value)).groups()
                    gps['gpslatitude'] = int(match_result[0]), int(match_result[1]), int(match_result[2])
                except:
                    deg, min, sec = [x.replace(' ', '') for x in str(value)[1:-1].split(',')]
                    gps['gpslatitude'] = latitude_and_longitude_convert_to_decimal_system(deg, min, sec)
            elif re.match('gps gpslongitude', tag):
                try:
                    match_result = re.match('\[(\w*),(\w*),(\w.*)/(\w.*)\]', str(value)).groups()
                    gps['gpslongitude'] = int(match_result[0]), int(match_result[1]), int(match_result[2])
                except:
                    deg, min, sec = [x.replace(' ', '') for x in str(value)[1:-1].split(',')]
                    gps['gpslongitude'] = latitude_and_longitude_convert_to_decimal_system(deg, min, sec)
            elif re.match('gps gpsaltitude', tag):
                gps['gpsaltitude'] = str(value)
            elif re.match('.*date.*', tag):
                date = str(value)
    return {'gps_information': gps, 'date_information': date}

百度api将gps转地址

这里需要使用调用百度api,将gps经纬度信息转换为具体的地址信息。

这里,你需要一个调用百度api的ak值,这个可以注册一个百度开发者获得,

当然,你也可以使用博主的这个ak

调用之后,就可以将拍摄时间、拍摄详细地址都解析出来。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def find_address_from_gps(gps):
    secret_key = 'zblsuddl4cs2u0m4kezozzbguy9iwtvf'
    if not gps['gps_information']:
        return '该照片无gps信息'
    #经纬度信息
    lat, lng = gps['gps_information']['gpslatitude'], gps['gps_information']['gpslongitude']
    baidu_map_api = "http://api.map.baidu.com/geocoder/v2/?ak={0}&callback=renderreverse&location={1},{2}s&output=json&pois=0".format(
        secret_key, lat, lng)
    response = requests.get(baidu_map_api)
    #百度api转换成具体的地址
    content = response.text.replace("renderreverse&&renderreverse(", "")[:-1]
    print(content)
    baidu_map_address = json.loads(content)
    #将返回的json信息解析整理出来
    formatted_address = baidu_map_address["result"]["formatted_address"]
    province = baidu_map_address["result"]["addresscomponent"]["province"]
    city = baidu_map_address["result"]["addresscomponent"]["city"]
    district = baidu_map_address["result"]["addresscomponent"]["district"]
    location = baidu_map_address["result"]["sematic_description"]
    return formatted_address,province,city,district,location
 
if __name__ == '__main__':
    gps_info = find_gps_image(pic_path='c:/女友自拍.jpg')
    address = find_address_from_gps(gps=gps_info)
    print("拍摄时间:" + gps_info.get("date_information"))
    print('照片拍摄:' + str(address))

python小哥得到的结果是这样的

照片拍摄地址:('云南省xxxxxxx县', '云南省', 'xxxx市', 'xxx县', 'xxxx酒店')

云南弥勒xxxx酒店,这明显不是老王女友工作的地方

小哥哥搜索了一下,这是一家温泉度假酒店。

顿时就明白了

完整代码:点此下载

到此这篇关于女友半夜加班发自拍 python男友用30行代码发现惊天秘密的文章就介绍到这了,更多相关python读取gps内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_42350212/article/details/116568510

延伸 · 阅读

精彩推荐