【问题标题】:How to batch edit a field in a jpg EXIF header?如何批量编辑 jpg EXIF 标头中的字段?
【发布时间】:2019-09-07 19:34:30
【问题描述】:

我正忙于一些无人机测绘。但是,图像中的高度值在重复飞行任务(最高 120m)之间非常不一致。我用来将我的无人机图像拼接成正射镶嵌图的程序认为无人机在地下飞行,因为图像高度低于实际的地面高度。

为了解决这个问题,我想批量编辑所有图像的高度值,方法是将实际地面高度和无人机高度之间的差异直接添加到图像的 EXIF 中。

例如 原始图像高度 = 250m。编辑后的图像高度 = 250m+x

我找到了exiftoolr R 包,它允许您通过使用独立的 ExifTool 和 Perl 程序来读取和写入 EXIF 数据(参见此处:https://github.com/JoshOBrien/exiftoolr

这是我目前的代码:

library(exiftoolr)

#Object containing images in directory
image_files <-dir("D:/....../R/EXIF_Header_Editing/Imagery",full.names=TRUE)

#Reading info
exif_read(image_files, tags = c("filename", "AbsoluteAltitude")) #Only interested in "filename" and "AbsoluteAltitude"

#Saving to new variable
altitude<-list(exif_read(image_files, tags=c("filename","AbsoluteAltitude")))

这是一些输出的样子:

       FileName AbsoluteAltitude
1  DJI_0331.JPG          +262.67
2  DJI_0332.JPG          +262.37
3  DJI_0333.JPG          +262.47
4  DJI_0334.JPG          +262.57
5  DJI_0335.JPG          +262.47
6  DJI_0336.JPG          +262.57
ext.

我知道需要将 x 添加到列表中的每个“AbsoluteAltitude”条目,然后用这个新调整的高度值覆盖现有的图像高度值,而不编辑任何其他重要的 EXIF 信息。

有什么想法吗?

我有一个允许我批量编辑 EXIF 高度的程序,但这会使所有的值都相同,我需要保持值之间的变化。

提前致谢

【问题讨论】:

    标签: r exif editing exiftool


    【解决方案1】:

    只是@StarGeek 回答的跟进。我设法找出了R等价物。这是我的解决方案:

    
        #Installing package from GitHub
        if(!require(devtools)) {install.packages("devtools")}
        devtools::install_github("JoshOBrien/exiftoolr",force = TRUE)
        #Installing/updating ExifTool program into exiftoolr directory
        exiftoolr::install_exiftool()
        #Loading packages
        library(exiftoolr)
    
        #Set working directory
        setwd("D:/..../R/EXIF_Header_Editing")
    
        #Object containing images
        image_files <- dir("D:/..../R/EXIF_Header_Editing/Imagery",full.names = TRUE)
    
        #Editing "GPSAltitude" by adding 500m to Altitude value
        exif_call(args = "-GPSAltitude+=500", path = image_files)
    
    

    当打开 .jpg 属性时,调整后的 Altitude 会显示出来。

    感谢 StarGeek

    【讨论】:

    • 感谢您跟进并发布答案。不要忘记选择它作为接受的答案。
    【解决方案2】:

    如果你愿意尝试只使用exiftool,你可以试试这个命令:
    exiftool -AbsoluteAltitude+=250 &lt;DIRECTORY&gt;

    我会先在您的文件的几个副本上对其进行测试,看看它是否符合您的需求。

    【讨论】:

    • 谢谢。我还没有使用 exiftool 控制台。所以需要快速适应语法。但是,有一个 exif.call 函数允许您传递 exiftool 命令。看看能不能解决
    猜你喜欢
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    相关资源
    最近更新 更多