当前位置 博文首页 > lexsaints:女友半夜加班发自拍 python男友用30行代码发现惊天秘

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

    作者:[db:作者] 时间:2021-07-25 22:08

    大家好,我是Lex 喜欢欺负超人那个Lex

    女友说今晚加班,还给我发了一张照片?

    我心生怀疑,就用python分析了一下照片,结果发现。。。

    划重点:利用Python读取照片的GPS信息信息

    事情是这样的

    正准备下班的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酒店,这明显不是老王女友工作的地方

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

    顿时就明白了

    {"status":0,"result":{"location":{"lng":103.41424699999998,"lat":24.410461020097278},
    "formatted_address":"云南省XXXXXXXX县",
    "business":"",
    "addressComponent":{"country":"China",
    "country_code":0,
    "country_code_iso":"CHN",
    "country_code_iso2":"CN",
    "province":"云南省",
    "city":"XXXXX市",
    "city_level":2,"district":XXX县",
    "town":"","town_code":"","adcode":"532526",
    "street_number":"",
    "direction":"","distance":""},
    "sematic_description":"XXXXX酒店",
    "cityCode":107}}
    
    拍摄时间:2021:5:03 20:05:32
    照片拍摄地址:('云南省XXXXXXX县', '云南省', 'XXXX市', 'XXX县', 'XXXXX酒店')

    完整代码

    https://download.csdn.net/download/weixin_42350212/19776215

    推荐阅读

    优质资源

    • Java实现照片GPS定位【完整脚本】
    • https://download.csdn.net/download/weixin_42350212/20024262
    • Python实现照片GPS定位【完整脚本】
    • https://download.csdn.net/download/weixin_42350212/19776215
    • 女神忘记相册密码 python20行代码打开【完整脚本】
    • https://download.csdn.net/download/weixin_42350212/19871942
    • python修改证件照底色、大小、背景、抠图【完整源码】
    • https://download.csdn.net/download/weixin_42350212/19815306

    python实战

    • 【python实战】前女友婚礼,python破解婚礼现场的WIFI,把名称改成了
    • 【python实战】前女友发来加密的 “520快乐.pdf“,我用python破解开之后,却发现
    • 【python实战】昨晚,我用python帮隔壁小姐姐P证件照 自拍,然后发现...
    • 【python实战】女友半夜加班发自拍 python男友用30行代码发现惊天秘密
    • 【python实战】python你TM太皮了——区区30行代码就能记录键盘的一举一动
    • 【python实战】女神相册密码忘记了,我只用Python写了20行代码~~~

    【pygame开发实战开发30例 完整源码】

    • https://download.csdn.net/download/weixin_42350212/15836285

    【pygame游戏开发专栏,获取完整源码+教程】

    • 一起来学pygame吧 游戏开发30例(二)——塔防游戏
    • 一起来学pygame吧 游戏开发30例(四)——俄罗斯方块小游戏
    • 渗透测试实战专栏
    • Windows AD/Exchange管理专栏
    • Linux高性能服务器搭建?
    • PowerShell自动化专栏

    CSDN官方学习推荐

    CSDN出的Python全栈知识图谱,太强了,推荐给大家!↓

    cs