怎么用Python修改一张图片的地理位置
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍"怎么用Python修改一张图片的地理位置",在日常操作中,相信很多人在怎么用Python修改一张图片的地理位置问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2026年11月04日怎么用Python修改一张图片的地理位置
这篇文章主要介绍"怎么用Python修改一张图片的地理位置",在日常操作中,相信很多人在怎么用Python修改一张图片的地理位置问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用Python修改一张图片的地理位置"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1.目标场景
实际上,利用 Python 是可以非常方便地修改一张图片的地理位置。
2.编写代码
在编写脚本之前,需要在虚拟环境下安装依赖库:piexif
第一步,我们读取原图的经度和纬度,然后将地理位置格式化为浮点类型。
拿到 GPS 图片坐标之后,需要转为火星坐标系数据。
def read_image(self, image_path): """ 开始处理图片 exifread:读取图片属性 :return: """ exif_dict = piexif.load(image_path) if exif_dict['GPS']: # 纬度 gps_lati_pre = exif_dict['GPS'][2] gps_lati = dms_to_gps(gps_lati_pre) # 经度 gps_long_pre = exif_dict['GPS'][4] gps_long = dms_to_gps(gps_long_pre) # GPS坐标转为高德坐标 lng, lat = wgs84togcj02(gps_long, gps_lati) print(f"原图地理位置如下\n经度:{lng}\n纬度:{lat}\n") return f'{lng}, {lat}' else: print(f'抱歉!这张图片不包含地理位置!')第二步,利用高德 Web 服务 API 中的 逆地理编码 解析出原图的详细位置。
def get_address_by_location(self, location): """ 通过经纬度拿到地理位置 :param location: :return: """ params = { 'key': self.ak, 'location': location, 'sig': self.sign } resp = json.loads(requests.get(url=self.url_regeo, params=params).text) if resp and resp.get('regeocode') and resp.get('regeocode').get('formatted_address'): address = resp.get('regeocode').get('formatted_address') print(f'原图的拍摄地址为:{address}\n') else: print('api解析地址出错,请检查ak!\n')第三步,寻找一个要定位的地理位置。
首先,输入目标城市和具体地址,利用高德 Web 服务 API 中的地理编码拿到要定位的地理位置。
def get_location_by_address(self, city, address): """ 通过地理位置到拿到经纬度 地理编码:https://lbs.amap.com/api/webservice/guide/api/georegeo/ :param address: :return: """ params = { 'key': self.ak, 'city': city, 'address': address, 'sig': self.sign } resp = json.loads(requests.get(url=self.url_geo, params=params).text) # 获取坐标地址 if resp and len(resp.get('geocodes')) >= 1 and resp.get('geocodes')[0].get('location'): location = resp.get('geocodes')[0].get('location') gps_data = location.split(',') # 得到经度和纬度 gps_long = float(gps_data[0]) gps_lati = float(gps_data[1]) return gps_long, gps_lati else: print('api解析地址出错,请检查ak!') return None第四步,修改图片的地理位置。
由于 piexif 中经、纬度数据都是元组类型,因此需要将要设置的数据进行一次处理。
def gps_to_dms(gps_data): """ 坐标转为度、分、秒(double) 116.397451 http://www.gzhatu.com/du2dfm.html :param gps_data: :return:{1: b'N', 2: ((22, 1), (32, 1), (945, 100)), 3: b'E', 4: ((114, 1), (1, 1), (3445, 100)) """ # 度:向下取整 gps_degree = math.floor(gps_data) gps_data_temp1 = (gps_data - gps_degree) * 60 # 分 gps_minute = math.floor(gps_data_temp1) gps_data_temp2 = gps_data_temp1 - gps_minute # 秒,取小数点后4位 gps_second = round(gps_data_temp2 * 60, 2) # 注意:秒必须转换为整形 result = ((gps_degree, 1), (gps_minute, 1), (int(gps_second * 100), 100)) return result最后,将正确格式的经纬度数据写入到图片中去。
def write_image(self, image_path, gps_long, gps_lati): """ 修改文件夹下所有文件的属性 :param image_path: 文件夹路径 :return: """ # 读取图片 img = Image.open(image_path) try: exif_dict = piexif.load(img.info['exif']) except: print('加载文件地理位置异常!') return # 修改地理位置 # GPS GPSLatitudeRef:N # GPS GPSLatitude:[22, 32, 189/20] # GPS GPSLongitudeRef:E # GPS GPSLongitude:[114, 1, 689/20] exif_dict['GPS'][2] = gps_to_dms(gps_lati) exif_dict['GPS'][4] = gps_to_dms(gps_long) exif_bytes = piexif.dump(exif_dict) # 写入到新的图片中去 img.save(image_path, 'jpeg', exif=exif_bytes)到此,关于"怎么用Python修改一张图片的地理位置"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
地理
位置
地理位置
图片
坐标
地址
纬度
原图
数据
文件
经度
学习
经纬
经纬度
编码
高德
属性
文件夹
更多
格式
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司
重生之互联网科技帝国
互联网科技深圳
金诺互联网科技
致骋互联网科技
上海喔噻互联网科技
苏州互联网科技贷款公司
互联网科技上市公司
互联网科技网站
互联网科技公司介绍
互联网科技宣传片
卫星互联网科技股票
深圳前海聚择互联网科技有限公司
武汉健翔互联网络科技有限公司
崇明区互联网教育科技诚信经营
中国航天科技大学国际工业互联网
梅州GM互联网络科技有限公司
城市宝互联网科技有限公司
普陀区互联网教育科技管理办法
恒生互联网科技趋势
新华互联网科技
中国 科技 互联网
互联网科技媒体
小马过河互联网科技
云电互联网科技
科技大学互联网专业好不好
互联网科技项目计划书材料类
成都铂石互联网科技做什么的
佛山市翊博互联网络科技有限公司
10位科技互联网大佬