在R中将一张JPG的全部EXIF信息复制到另一张JPG
在R中复制EXIF元数据到新JPG文件的方案
R原生图像处理包(如magick、jpeg)保存图片时通常会丢失EXIF元数据,而exiftoolr包通过调用ExifTool工具,能可靠完成元数据的完整复制与局部修改,这是目前最实用的解决方法。
具体操作步骤
安装依赖环境
- 安装并加载
exiftoolr包:install.packages("exiftoolr") library(exiftoolr) - 首次运行
exiftoolr时,会自动检测系统是否安装ExifTool工具,若未安装,会给出对应系统的安装指引(Windows可直接下载安装包,mac用brew install exiftool,Linux用apt install libimage-exiftool-perl)。
- 安装并加载
完整复制EXIF元数据
假设原图片路径为original.jpg,处理后的新图片路径为processed.jpg,执行以下命令即可将原图片的所有EXIF标签(含子标签)复制到新图片:exiftool(args = "-tagsFromFile original.jpg -all:all processed.jpg")该命令会覆盖新图片中原有的所有元数据(如果有)。
修改少量特定标签(可选)
若需要调整个别标签,可在复制命令中直接追加修改参数,比如修改拍摄日期DateTimeOriginal:exiftool(args = "-tagsFromFile original.jpg -all:all -DateTimeOriginal='2024:05:20 14:30:00' processed.jpg")也可先完成全量复制,再单独修改目标标签:
# 先复制全部元数据 exiftool(args = "-tagsFromFile original.jpg -all:all processed.jpg") # 再修改指定标签 exiftool(args = "-DateTimeOriginal='2024:05:20 14:30:00' processed.jpg")验证复制结果
用exif_read()读取新图片的元数据,确认复制是否成功:new_exif <- exif_read("processed.jpg") str(new_exif)
注意事项
- 若文件路径包含空格,建议用
file.path()生成标准化路径,或给路径加引号。 - 部分图像包(如
magick)保存时可加strip = FALSE尝试保留元数据,但覆盖性和完整性远不如ExifTool的复制方案。 - ExifTool支持绝大多数图像格式的元数据操作,不限于JPG。
内容的提问来源于stack exchange,提问作者user2955884
相关产品推荐
相关产品推荐

