范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

根据女友的一张照片,程序员男友用python就获取到她的详细位置

  一.引言
  先看获取到的效果拍摄时间:2021:12:18 16:22:13 照片拍摄地址:("内蒙古自治区包头市昆都仑区", "内蒙古自治区", "包头市", "昆都仑区", "多米幼儿园东南360米")
  我们的女朋友给我们发来一张照片我们如何获取到她的位置呢?
  用手机拍照会带着GPS信息,原来没注意过这个,因此查看下并使用代码获取照片里的GPS信息
  查看图片文件属性
  1.读取照片信息,获取坐标
  ExifRead
  Python library to extract EXIF data from tiff and jpeg files.
  安装pip install exifread
  读取GPSimport exifread import re  def read():     GPS = {  }     date = ""     f = open("C:Users24190Desktop小朱学长.jpg","rb")     contents = exifread.process_file(f)     for key in contents:         if key == "GPS GPSLongitude":             print("经度 =", contents[key],contents["GPS GPSLatitudeRef"])         elif key =="GPS GPSLatitude":             print("纬度 =",contents[key],contents["GPS GPSLongitudeRef"])         #print(contents) read()
  运行
  我们得到了一个简易的gps地址
  如果想要读取全部的拍摄信息:# 读取照片的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}2.通过baidu Map的API将GPS信息转换成地址。
  众所周知gps和百度的经纬度会有误差,那么我们需要调用百度转换接口,这个百度目前没有开源。# 通过baidu Map的API将GPS信息转换成地址。 def find_address_from_GPS(GPS):         """         使用Geocoding API把经纬度坐标转换为结构化地址。         :param GPS:         :return:         """         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)         content = response.text.replace("renderReverse&&renderReverse(", "")[:-1]         print(content)         baidu_map_address = json.loads(content)         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
  然后在主函数输出:
  二.源码附上!!!# coding=utf-8 """ 作者 : 小朱学长 微信公众号 : 八方支猿 """ import exifread import re import json import requests import os   # 转换经纬度格式 def latitude_and_longitude_convert_to_decimal_system(*arg):         """         经纬度转为小数, param arg:         :return: 十进制小数         """         return float(arg[0]) + ((float(arg[1]) + (float(arg[2].split("/")[0]) / float(arg[2].split("/")[-1]) / 60)) / 60)   # 读取照片的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}   # 通过baidu Map的API将GPS信息转换成地址。 def find_address_from_GPS(GPS):         """         使用Geocoding API把经纬度坐标转换为结构化地址。         :param GPS:         :return:         """         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)         content = response.text.replace("renderReverse&&renderReverse(", "")[:-1]         print(content)         baidu_map_address = json.loads(content)         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="小朱学长.jpg")         address = find_address_from_GPS(GPS=GPS_info)         print("拍摄时间:" + GPS_info.get("date_information"))         print("照片拍摄地址:" + str(address))注意事项
  1.照片的地址信息等,一般的手机相机默认是打开的。
  2.微信和QQ里面发送原图,信息都会完整的保留下来。
  3.代码里面需要处理在照片我放到了代码的同文件夹下,所以没有写路径,大家可以自己写路径,或者放到与代码相同的路径下即可。
  (有任何问题的话,欢迎评论区或者私信我哦,我都会看的!)
  :heart::heart::heart:如果你喜欢的话,就不要吝惜你的一键三连了~

南卡RunnerPro2耳机16G内存独立播放骨传导技术NFC连接南卡骨传导蓝牙耳机因为其不入耳的骨传导技术,带来更大的安全性,受到许多人尤其是跑者的喜爱,最近南卡又推出了年度旗舰骨传导耳机南卡RunnerPro2,拥有了更大的内存和NFC连接,联想第二款白菜价手机联想Z6Pro,骁龙855处理器大内存,为啥一些人不敢入手?谢邀!首先我们说现代商品的发展趋势肯定是追随于品牌,这是没有任何问题的,各个行业各个领域目前也都遵循这样的规律。而产品最终的核心竞争力一定是有相当一大部分的贡献来源于品牌。那么对于9款AppleWatch续航测试对比AppleWatch7续航提升多少?众所周知,苹果发布iPhone13系列旗舰手机的同时,也推出了最新款苹果智能手表AppleWatchSeries7,相较于前代机型,在核心性能和外观设计方面,AppleWatchSryzen6000系列处理器跑分曝光基准测试超过英特尔GPU援引cnbeta消息,AMD即将推出集成RDNA2GPU的Ryzen6000RembrandtAPU已经开始出现在基准测试中,测试结果显示,与英特尔和NVIDIA的同类产品相比,性电池续航测试排名6款手机对比,iPhone13ProMax排第几名?如今的智能手机似乎到了瓶颈期,创新越来越少,比如当前热卖的iPhone13系列旗舰手机,虽然没有什么创新,但丝毫不影响消费者对它的热爱,从各大平台来看,目前iPhone13系列机型老烧们的听力都还好吗?给大家推荐一款功能强大的听力测试软件我们在网上看到很多听力测试软件都是播放各种频率的录音,但很多音频视频格式的听力测试录音实际上质量低劣,它发出18K的频率可能因为录音设备或者放大设备的问题产生了其他频率的谐波。明明Mac系统优化工具,谁能推荐一款?最好不要优化,之前买过正版的cleanmymac3,竟然后期不维护了,新版要再花钱升级,现在等于废的。而且优化有可能导致各种问题,之前遇到过只能重装系统。卸载app的软件倒是可以用太过分了,苹果提出的要求太过分了太过分了,苹果提出的要求太过分了!幸好,比亚迪和宁德时代坚决不从,一起拒绝了苹果电池代工的邀请。究竟是怎么回事儿呢?大家都知道,苹果一直考虑造车,而且有意和比亚迪宁德合作,因为这是Twitter广告收入增长强劲,未受苹果公司更新隐私政策影响据华尔街日报10月27日报道,TwitterInc。公布第三财季收入增长37,基本上躲过了苹果公司新推出的应用程序隐私政策和供应链中断带来的数字广告市场动荡。该公司周二公布第三财季美监管机构狠批特斯拉(TSLA。US),称其自驾功能误导司机智通财经APP获悉,周二,美国国家运输安全委员会(NTSB)负责人批评了特斯拉(TSLA。US)的驾驶辅助系统Autopilot,称该公司在其最新系统中使用的完全自动驾驶(FSD)给苹果8p用12w的充电器充电会怎么样?会不会对电池不好?您好,我是镜片600度,很高兴回答这个问题。苹果8P用12W的充电器是否伤害手机,我给出的答案是不会伤害手机的。实测充8P的电流和充IPAD的差不多。具体为什么不会伤害手机,我来给
本周热门家电TOP5报价,70吋电视3299元白露已过,秋高气爽,又到了金九银十装修旺季。一提到装修相信很多人都会头痛,不仅设计重要,家电的选购亦非常重要。今天,笔者就为大家带来本周热门家电TOP5报价,快来看看有没有你喜欢的小米和iPhone都有钉子户,华为这款手机又有多少人知道?最近刷到网上说华为Mate40系列如何的畅销,我就拿起我自己的备用机华为Mate9,这部手机发布了也有五年了。作为前辈级手机,我发现网上很多人说自己也还在用华为Mate9,说明这部TCL折叠屏手机曝光,形似三星ZFilp3,售价5K左右近两年的折叠手机真的是越来越多,TCL也紧跟潮流,不但有折叠屏的专利,还有环绕屏手机。近期相关爆料显示,TCL将会推出一款折叠屏手机,而这款手机的真机近期也曝光了,从曝光的图片来看vivoX70Pro智能手机音质测评报告SOOMALvivoX70系列智能手机发布会HiFi绝对不会缺席在X70系列的发布会上,主持人说到HIFI绝对不会缺席,虽然只是一句带过,但vivo再次兑现了承诺,在X70Pro上延续了HIF努比亚12GB版红魔6游戏手机,已降到4199元5050mAh电池165Hz屏众所周知,努比亚的红魔游戏手机非常出名。比如红魔6游戏手机,该机搭载了高通骁龙888旗舰处理器,配备了12GB256GB顶级存储版本。目前其顶配版已经开始进行降价处理,可以考虑入手评测中端复出,荣耀X20实力自证,角逐两千元档位最佳之选手机市场里,中端产品一直是不可忽略的存在,刚发布没多久的荣耀X20就是这样一款手机,荣耀中端手机还是回来了。作为荣耀X10的迭代产品,荣耀X20不同于以往,最大的特点就是芯片不再是2021下半年旗舰机怎么选?盘点三款热门新机!适合才是最好的2021下半年堪称神仙打架,各大厂商纷纷发布旗舰机,争得高端市场份额。而作为消费者的我们,如何在众多新品旗舰中找到最适合我们的一款?放心,小野为大家总结了三大热门新机的亮点和不足,TCL还在生产手机?首款折叠屏手机确认泡汤外观优秀但不敢生产有一些关心手机的人,会注意到,前段时间,TCL放出了一些折叠屏手机的原型。而且,TCL依靠着自身的屏幕技术研发能力,发布了数款原型机,包括10英寸的折叠屏手机拉伸式卷曲式的折叠屏手鸿蒙系统在网上引起了热议,我该不该更新鸿蒙系统呢?实践是检验真理的唯一标准。华为出鸿蒙操作系统,这有别于苹果系统和安卓系统。鸿蒙好不好用,尚是未知数。我手中现有华为,不过已用近4年,系统基于安卓7。由于这个华为为低档千元机,现在已华为供货不足,若友商不用鸿蒙,华强北有可能推出鸿蒙山寨机吗?只要是鸿蒙系统山寨机也无所谓。说句实话,只要能将鸿蒙撑下去,终有出头之日也许华强北不只是简单的推出鸿蒙山寨机,而且要刷机,任何型号手机都可以安装,老旧机型都可以华为也将为所有安装鸿吸睛又吸金!华为鸿蒙来了,10只概念股应声涨停,超5。5亿元资金追捧这4只个股本报记者张颖6月2日晚间,华为正式发了鸿蒙操作系统2。0(HarmonyOS),该系统可以搭载在任何loT设备上,将所有设备统一语言,打通生态系统实现万物互联。这一消息如同一剂强心