事情是这样的

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

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

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

如下 ↓ ↓ ↓

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

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

分析下来 emmm

拍摄地址居然在 xxx酒店

小哥哥崩溃之余 大呼上当

python分析照片

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

并使用python写了一个脚本

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

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

引入exifread模块

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

pip install exifread 安装exfriead模块

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模块,来读取照片内的经纬度信息。

#读取照片的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

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

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内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!