用exiftool一次为多个文件夹下的照片添加经纬度

Exiftool是用来读写照片exif信息的软件, 将GPS轨迹 gpx文件放在照片文件夹下,可以一次性为该文件夹下所有照片添加GPS经纬度信息。 添加过经纬度的照片在GeoSetter的软件, 或者其他智能手机中查看十分方便。为照片自动匹配经纬度信息已经成为当前生物多样性调查中的基本步骤之一。 如果积累了较多的照片在不同文件夹中,同时又要一次性更新该文件夹下的所有照片,就稍显麻烦。这里介绍如何用R驱动exiftool, 遍历所有的文件夹, 并更新每张照片的exif信息。

Exiftool (www.sno.phy.queensu.ca/~phil/exiftool/)下载后解压缩, 将 exiftool(-k).exe 改名为exiftool.exe。 放在路径上没有中文的文件夹,如 C:\Program Files\exiftools, 并将该路径添加到系统路径中。

将exiftool添加到系统路径:我的电脑 > 属性 > 高级系统设置> 环境变量。

在系统变量部分中,找到并选择 PATH环境变量。单击编辑。

新建系统变量窗口中,新建 PATH 环境变量的值,加上双引号里面的内容, “C:\Program Files\exiftools” 单击确定。通过单击确定关闭所有剩余窗口。

运行以下R脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
setwd("C:/Users/photos")

#### 航迹gpx文件名
geotag <- "place.gpx"

#### 所有相册的根目录
parent.folder <- "C:/Users/photos"

#### 列出所有子目录
dirs <- list.dirs(path = parent.folder, full.names =TRUE, recursive =TRUE)

#### copy the gpx file toeach subfolder
for(i in 2:length(dirs)){
setwd(dirs[i])
#### 将gpx文件拷贝到每一个子文件夹。如果每个文件夹已经有gpx文件, 则请忽略。
file.copy(from ="C:/Users/photos/place.gpx", to = geotag, overwrite =TRUE)
#### 运行exiftool 命令行
system(paste("exiftool -geotag ", geotag, "./"))
#### unlink(geotag)
}

注: 本文是应华南农业大学曾思金博士的要求而编写的。