想要悄悄的获取某人的位置,只需通过拍摄的照片,就能可以实现。
此方法需要用到识别图片元数据的库。
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 通过图片(原图)精确获取图片拍摄的位置,时间,设备等信息-阿里云开发者社区