python 通过图片(原图)精确获取图片拍摄的位置
想要悄悄的获取某人的位置,只需通过拍摄的照片,就能可以实现。
此方法需要用到识别图片元数据的库。
pip3 install exifread
1. 粗获取
获取拍摄照片的经纬度,时间,设备信息。这里使用的照片需是拍摄的原图,图片路径本文是放在了与运行程序相同的文件夹。
实现代码如下:
__author__ = 'Jeff.xie'
import exifread
# 获取照片位置
class Image_Location():
def __init__(self, image_path):
self.img_path = image_path
def lati_long_date(self, data):
"""
对经纬度进行处理,保留6位小数
"""
# 删除左右括号,最后以逗号分隔为一个列表
data_list_tmp = str(data) .replace('[', '').replace(']', '').split(',')
# 循环取出每个元素,删除元素两边的空格,得到一个新列表
data_list = [date.strip() for date in data_list_tmp]
print(data_list)
# 替换秒的值
data_tmp = data_list[-1].split('/')
# 秒的值
data_sec = int(data_tmp[0]) / int(data_tmp[1]) / 3600
# 替换分的值
data_tmp = data_list[-2]
# 分的值
data_minute = int(data_tmp) / 60
# 度的值
data_degree = int(data_list[0])
# 由于高德API只能识别到小数点后的6位
# 需要转换为浮点数,并保留为6位小数
result = "%.6f" % (data_degree + data_minute + data_sec)
return float(result)
def get_image_exif(self):
"""
获取图片的属性:纬度,经度,拍摄时间等
"""
# 通过exifread获取图片的属性
img_read = open(self.img_path, 'rb')
img_exif = exifread.process_file(img_read)
# 读取到的属性
if img_exif:
for exif in img_exif:
# 纬度
if exif == "GPS GPSLatitude":
latitude = img_exif["GPS GPSLatitude"]
print(latitude)
# 纬度的方向
elif exif == "GPS GPSLatitudeRef":
latitude_direction = img_exif["GPS GPSLatitudeRef"]
# 经度
elif exif == "GPS GPSLongitude":
longitude = img_exif["GPS GPSLongitude"]
# 经度方向
elif exif == "GPS GPSLongitudeRef":
longitude_direction = img_exif["GPS GPSLongitudeRef"]
# 拍摄时间
elif exif == "EXIF DateTimeDigitized":
take_time = img_exif["EXIF DateTimeDigitized"]
# 拍摄设备
elif exif == "Image Make":
take_equipment = img_exif["Image Make"]
# 拍摄型号
elif exif == "Image Model":
take_model = img_exif["Image Model"]
# 对获取的经纬度信息进一步处理
if latitude and longitude:
latitude_date = self.lati_long_date(latitude)
longitude_date = self.lati_long_date(longitude)
print("纬度为:", latitude_date)
print("经度为:", longitude_date)
print("拍摄时间为:", take_time)
print("拍摄设备为: ", take_equipment)
print("拍摄型号为:", take_model)
else:
print("图像信息为空,可能是上传的不是原图")
if __name__ == '__main__':
path=r"C:\Users\jeff.xie\Desktop\aa\IMG_20210815_175252.jpg"
#图片一定要是从手机里面直接拷贝到电脑,通过微信发到电脑的图片无法正常读取
location = Image_Location(path)
location.get_image_exif()
输出结果如下所示:
[22, 35, 559967/10000]
['22', '35', '559967/10000']
['114', '2', '130343/10000']
纬度为: 22.598888
经度为: 114.036954
拍摄时间为: 2021:08:15 17:52:53
拍摄设备为: Xiaomi
拍摄型号为: Redmi Note 7 Pro
根据坐标获取在地图上查找位置
1.首先在电脑上打开百度地图,在下方找到【地图开发平台】
2.点击地图开放平台进入百度地图开放平台界面,找到【开发文档】,点击开发文档弹出下拉菜单,在开发者工作里找到【坐标拾取器】。
3.点击进入拾取坐标系统,勾选【坐标反查】,接下来在输入框内输入经纬度,即可查询到地理位置了。
相关文章
- 【Python成长之路】python 基础篇 -- global/nonlocal关键字使用
- 如何通过python代码解压zip包
- Python基于正则表达式实现文件内容替换的方法
- Atitit nlp自然语言处理类库(java python nodejs c#net) 目录 1.1. Python snownlp1 1.2. NLP.js一个nodejs/javascri
- Python编程语言学习:基于python各种库(matplotlib、Image)利用多种方法展示图片或进行图片可视化之详细攻略
- Python编程语言学习:python中与数字相关的函数(取整等)、案例应用之详细攻略
- Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Button展示图片事件)
- Python语言学习之数值、小数、空格那些事:python和数值、小数、空格的使用方法之详细攻略
- Python可视化数据分析09、MySQL读写
- 〖Python 数据库开发实战 - MySQL篇㊱〗- 综合案例 - 关于数据表 password 字段的数据加密
- 【Python成长之路】python并发学习:多进程与多线程的用法及场景介绍
- 10 大经典排序算法 Python 版实现(附动图演示)
- Python 实现获取【昨天】【今天】【明天】日期
- 雅虎财经数据python 网络爬虫stock股票 用 Python 通过雅虎财经获取股票数据
- python自动化测试学习-Python测试框架之unittest和pytest
- 通过Python爬虫获取【小说网站】数据,保姆级教学
- Python数学计算工具5、Python求最最小公倍数