如何修改照片定位信息?详细介绍两个方法

在日常工作和生活中,我们经常需要修改照片的定位信息(经纬度),比如整理旅行照片、规范工作图片元数据、修复误判的照片定位等。手动修改单张照片的经纬度繁琐且低效,今天给大家分享两个修改照片位置信息的方法,从简单的界面话工具到编程代码的方式实现。

如何修改照片定位信息?详细介绍两个方法

方法一:使用"汇帮元数据编辑器"修改照片的定位信息

一、工具准备:汇帮元数据编辑器
1. 软件简介

汇帮元数据编辑器是一款专业的文件元数据处理工具,支持图片、Office文件等多种格式的元数据编辑,其中图片元数据编辑模块可精准修改照片的经纬度、拍摄时间、作者等信息,核心优势是支持批量操作,可一次性修改多张照片,且直接修改原文件,无需额外导出保存,大幅提升效率。

2. 软件下载地址

https://www.huibang168.com/metadata

二、完整操作步骤(批量修改照片经纬度)
步骤1:安装软件并进入图片元数据编辑模块
  1. 下载完成后,按照提示完成软件安装(默认下一步即可,无需修改额外设置);

  2. 启动软件,进入主界面,在首页找到**"图片元数据编辑"**选项,点击进入该功能模块(界面分类清晰,无需多余操作,直接定位核心功能)。

步骤2:批量添加需要修改的照片
  1. 进入图片元数据编辑界面后,点击界面中的**"添加"**按钮;

  2. 在弹出的文件浏览器中,选中需要修改位置信息的所有照片,支持批量选择;

  3. 补充说明:软件支持多种图片格式,包括JPG、PNG、WebP等常见格式,无数量限制,添加多少张即可批量修改多少张,无需逐个处理。

步骤3:进入图片元数据详细设置页面
  1. 照片添加完成后,在软件界面右侧会自动显示每张照片的各类元数据信息,软件已对元数据进行分类,主要分为"常用元数据"和"更多属性";

  2. 由于经纬度信息属于"更多属性"范畴,我们需要点击界面上方的**"查看更多"**选项,进入元数据详细设置页面。

步骤4:定位经纬度(Latitude/Longitude)编辑入口
  1. 进入详细设置页面后,向下拉动滚动条,找到经纬度相关选项,分别是 Latitude(纬度)和 Longitude(经度);

  2. 可以看到两个选项右侧均带有「编辑按钮」(铅笔图标),点击该按钮即可进入经纬度修改界面。

步骤5:批量修改纬度(Latitude)信息
  1. 点击 Latitude(纬度)右侧的编辑按钮,弹出经纬度输入弹框;

  2. 在弹框中输入需要设置的纬度数据(注意:经纬度格式需规范,可根据实际需求输入,例如39.9042° N);

  1. 输入完成后,点击弹框中的**"批量修改所有文件"**按钮(重点!点击该按钮可将当前设置的纬度应用到所有添加的照片,实现批量修改)。
步骤6:批量修改经度(Longitude)信息
  1. 按照步骤5的操作,点击 Longitude(经度)右侧的编辑按钮,弹出输入弹框;

  2. 输入需要设置的经度数据(例如116.4074° E);

  1. 同样点击「批量修改所有文件」按钮,完成所有照片的经度修改。

提示修改完成后,我们可以看到照片的属性被改成我们需要的值。

三、操作验证与注意事项
1. 验证修改结果

当经度、纬度均修改完成后,软件界面会提示"操作完成",此时返回元数据查看界面,可直接看到所有照片的经纬度已更新为我们设置的信息,修改即时生效。

2. 核心注意事项

(1)经纬度格式:输入时需注意格式规范,可输入十进制格式(如39.9042)或度分秒格式(如39°54′15.12″),确保数据准确;

(2)批量修改确认:每次修改纬度/经度时,务必点击「批量修改所有文件」,否则仅会修改当前选中的单张照片;

(3)原文件修改:该软件修改经纬度时,直接修改原照片的元数据,无需额外保存或导出,修改完成后直接关闭软件即可;

方法二:使用代码的方式实现照片的定位修改

通过 Python 批量修改照片经纬度的核心是操作图片的 EXIF 元数据(照片的元数据信息,包含经纬度、拍摄时间等),推荐使用piexif库(轻量、易上手),兼容 JPG/PNG 等主流图片格式,以下是完整可运行的代码教程。

一、前置准备
  1. 安装依赖库打开终端 / 命令提示符,执行以下命令安装所需库:

    复制代码
    pip install piexif  # 处理EXIF元数据
    pip install pillow  # 辅助读取图片(可选,piexif已依赖)
  2. 核心原理 照片的经纬度存储在 EXIF 的GPS标签中,格式为「度分秒」的数值组合,代码需将十进制经纬度(如39.9042)转换为 EXIF 标准格式,再写入图片元数据。

二、完整代码(单张 / 批量修改)

python

运行

复制代码
import piexif
import os

def decimal_to_dms(decimal):
    """
    将十进制经纬度转换为EXIF要求的度分秒格式(元组形式)
    :param decimal: 十进制经纬度(如39.9042)
    :return: (度, 分, 秒)的元组,符合EXIF存储规范
    """
    # 取绝对值(方向由后续参数控制)
    abs_decimal = abs(decimal)
    # 计算度
    degrees = int(abs_decimal)
    # 计算分
    minutes_float = (abs_decimal - degrees) * 60
    minutes = int(minutes_float)
    # 计算秒
    seconds = (minutes_float - minutes) * 60
    # 转换为EXIF要求的格式:(数值, 分母),分母固定为1
    return ((degrees, 1), (minutes, 1), (round(seconds * 10000), 10000))

def modify_photo_gps(image_path, latitude, longitude, backup_original=True):
    """
    修改单张照片的经纬度
    :param image_path: 图片文件路径(如"test.jpg")
    :param latitude: 纬度(十进制,如39.9042,北纬为正,南纬为负)
    :param longitude: 经度(十进制,如116.4074,东经为正,西经为负)
    :param backup_original: 是否备份原文件(默认True,避免误操作)
    """
    try:
        # 1. 备份原文件(可选)
        if backup_original:
            backup_path = image_path + ".backup"
            if not os.path.exists(backup_path):
                with open(image_path, "rb") as f1, open(backup_path, "wb") as f2:
                    f2.write(f1.read())

        # 2. 读取图片的EXIF数据(若无则创建空字典)
        exif_dict = piexif.load(image_path)

        # 3. 转换经纬度为EXIF格式
        lat_dms = decimal_to_dms(latitude)
        lon_dms = decimal_to_dms(longitude)

        # 4. 设置GPS标签(核心:填充经纬度和方向)
        gps_ifd = {
            # 纬度:度分秒
            piexif.GPSIFD.GPSLatitude: lat_dms,
            # 纬度方向:N(北纬)/S(南纬)
            piexif.GPSIFD.GPSLatitudeRef: "N" if latitude > 0 else "S",
            # 经度:度分秒
            piexif.GPSIFD.GPSLongitude: lon_dms,
            # 经度方向:E(东经)/W(西经)
            piexif.GPSIFD.GPSLongitudeRef: "E" if longitude > 0 else "W",
        }

        # 5. 更新EXIF的GPS数据
        exif_dict["GPS"] = gps_ifd

        # 6. 将修改后的EXIF写回图片
        exif_bytes = piexif.dump(exif_dict)
        piexif.insert(exif_bytes, image_path)

        print(f"✅ 成功修改:{image_path} | 纬度:{latitude} | 经度:{longitude}")

    except Exception as e:
        print(f"❌ 失败修改:{image_path} | 错误:{str(e)}")

def batch_modify_photo_gps(folder_path, latitude, longitude):
    """
    批量修改文件夹内所有图片的经纬度
    :param folder_path: 文件夹路径(如"./photos")
    :param latitude: 目标纬度
    :param longitude: 目标经度
    """
    # 支持的图片格式(可扩展)
    support_formats = (".jpg", ".jpeg", ".png", ".webp")
    # 遍历文件夹内所有文件
    for file_name in os.listdir(folder_path):
        file_path = os.path.join(folder_path, file_name)
        # 仅处理文件+支持的格式
        if os.path.isfile(file_path) and file_name.lower().endswith(support_formats):
            modify_photo_gps(file_path, latitude, longitude)

# ==================== 示例调用 ====================
if __name__ == "__main__":
    # 示例1:修改单张图片
    # modify_photo_gps(
    #     image_path="./test.jpg",  # 你的图片路径
    #     latitude=39.9042,         # 目标纬度(北纬39.9042)
    #     longitude=116.4074       # 目标经度(东经116.4074)
    # )

    # 示例2:批量修改文件夹内所有图片
    batch_modify_photo_gps(
        folder_path="./photos",    # 你的图片文件夹路径
        latitude=39.9042,         # 目标纬度
        longitude=116.4074        # 目标经度
    )
三、代码使用说明
  1. 单张修改 取消示例1的注释,修改image_path为你的图片路径(如"C:/Users/xxx/Desktop/photo.jpg"),设置目标经纬度,运行代码即可。

  2. 批量修改 取消示例2的注释,将folder_path改为存放图片的文件夹路径(如"C:/Users/xxx/Desktop/photos"),设置统一的经纬度,运行后会自动处理文件夹内所有 JPG/PNG/WebP 图片。

  3. 经纬度方向说明

    • 北纬:纬度值为正数(如39.9042),南纬为负数(如-30.0341);
    • 东经:经度值为正数(如116.4074),西经为负数(如-118.2437)。
四、验证修改结果
  1. 右键点击修改后的图片 → 「属性」→ 「详细信息」;
  2. 下拉找到「GPS」分类,即可看到修改后的经纬度信息。
五、注意事项
  1. 格式兼容:PNG/WebP 部分图片可能无 EXIF 数据,代码会自动创建并写入;
  2. 备份机制 :默认开启原文件备份(后缀.backup),修改出错可直接恢复;
  3. 权限问题:若提示 "权限不足",需以管理员身份运行 Python 脚本;
  4. 特殊图片:经过压缩 / 编辑的图片可能丢失 EXIF,修改后会重新生成。

总结

  1. 核心依赖piexif库,需先安装,代码兼容 Python3.6+;
  2. 关键步骤是将十进制经纬度转换为 EXIF 要求的「度分秒」格式;
  3. 支持单张 / 批量修改,自带备份机制,新手也能安全操作。

如果需要处理特殊格式(如 HEIC),可补充安装pyheif库,我可以提供适配代码。

相关推荐
Oueii1 小时前
构建一个基于命令行的待办事项应用
jvm·数据库·python
小瓦码J码2 小时前
PostgreSQL pg_stat_statements 性能分析利器(二)全表扫描导致物理IO爆炸
数据库·postgresql
2501_945423542 小时前
如何为开源Python项目做贡献?
jvm·数据库·python
2401_884563242 小时前
使用Flask快速搭建轻量级Web应用
jvm·数据库·python
清风徐来QCQ2 小时前
Redis以及如何在springboot中使用
数据库·redis·缓存
编程饭碗2 小时前
【Mysql日期字段】
数据库·mysql
Thomas.Sir2 小时前
精通 MySQL 面试题
数据结构·数据库·mysql
上海云盾-小余2 小时前
应用层漏洞实战防护:SQL 注入、XSS、文件上传漏洞一站式加固方案
数据库·sql·xss
鸽芷咕2 小时前
从语法兼容到语义一致:深度解析金仓如何“无感”承接MySQL复杂业务
数据库·mysql