如何用脚本结合exiftool从文件读取数据为4000张图片添加经纬度
批量用ExifTool给图片添加GPS经纬度的脚本方案
这事儿很容易解决,用ExifTool配合简单的脚本就能搞定4000张图片的批量操作,我给你分平台详细说明:
准备工作
- 确保你已经安装了ExifTool,直接搜索下载对应平台的版本即可
- 确认坐标文本文件(比如命名为
coords.txt)格式正确:每行对应一张图片,三列内容用空格(或逗号,后续会说明调整方法)分隔,示例如下:1.jpg 39.9042 116.4074 2.jpg 31.2304 121.4737 ... 4000.jpg 23.1291 113.2644
Linux/macOS 用Bash脚本
创建一个名为add_gps.sh的脚本,内容如下:
#!/bin/bash # 读取坐标文件的每一行,拆分出文件名、纬度、经度 while IFS=' ' read -r filename lat lon; do # 先检查文件是否存在,避免无意义报错 if [ -f "$filename" ]; then echo "正在处理:$filename" # 写入GPS信息,这里默认是北纬(N)和东经(E),南纬/西经请改成S/W exiftool \ -GPSLatitude="$lat" \ -GPSLongitude="$lon" \ -GPSLatitudeRef="N" \ -GPSLongitudeRef="E" \ # 可选:如果不想保留原文件备份,取消下面这行注释 # -overwrite_original \ "$filename" else echo "⚠️ 警告:文件 $filename 不存在,已跳过" fi done < coords.txt
使用步骤:
- 给脚本添加执行权限:
chmod +x add_gps.sh - 进入图片和坐标文件所在的目录,运行脚本:
./add_gps.sh
Windows 用批处理脚本
创建一个名为add_gps.bat的脚本,内容如下:
@echo off setlocal enabledelayedexpansion # 按空格拆分每行的三列内容,如果你的坐标文件是逗号分隔,把delims= 改成 delims=, for /f "tokens=1,2,3 delims= " %%a in (coords.txt) do ( if exist "%%a" ( echo 正在处理:%%a exiftool ^ -GPSLatitude="%%b" ^ -GPSLongitude="%%c" ^ -GPSLatitudeRef="N" ^ -GPSLongitudeRef="E" ^ :: 可选:取消下面这行注释以跳过生成备份文件 :: -overwrite_original ^ "%%a" ) else ( echo ⚠️ 警告:文件 %%a 不存在,已跳过 ) )
使用步骤:
- 确保ExifTool的
exiftool.exe在系统PATH中,或者直接放到脚本和图片所在的目录 - 双击运行
add_gps.bat即可开始批量处理
关键注意事项
- 坐标方向调整:如果你的纬度是南纬,把
GPSLatitudeRef改成S;经度是西经的话,把GPSLongitudeRef改成W。如果坐标已经带正负号(比如南纬用-30.xxxx),可以直接去掉GPSLatitudeRef和GPSLongitudeRef参数,ExifTool会自动识别方向。 - 分隔符适配:如果坐标文件用逗号分隔(比如
1.jpg,39.9042,116.4074),Bash脚本里把IFS=' '改成IFS=',';批处理里把delims=改成delims=,。 - 测试先行:建议先拿1-2张图片测试脚本,确认经纬度写入正确后再批量处理4000张,避免操作失误。
- 备份文件:ExifTool默认会给原文件生成带
_original后缀的备份,不需要的话就加上-overwrite_original参数。
内容的提问来源于stack exchange,提问作者rehman
相关产品推荐
相关产品推荐

