zl程序教程

您现在的位置是:首页 >  后端

当前栏目

python 通过图片(原图)精确获取图片拍摄的位置

Python 获取 图片 通过 位置 精确 拍摄
2023-09-11 14:22:10 时间

想要悄悄的获取某人的位置,只需通过拍摄的照片,就能可以实现。

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