用于摄像机陷印图像管理的Exif数据。根据日期时间和文件夹名称为图像创建新名称

时间:2017-05-17 10:46:05

标签: r image function loops exif

我很抱歉我的愚蠢问题,但我正在努力编写我想要的代码。我正在使用博客文章中的代码:Dewey Dunnington的鱼和哨子(http://apps.fishandwhistle.net/archives/956)。

我正在尝试编写一个循环,我可以使用文件夹名称和EXIF数据中的“CreateDate”日期时间重命名所有文件夹中的所有图像(递归)。图像存储在相机站(例如“A”站)文件夹中,然后存储在相机文件夹中(工作站上的2个相机,例如相机“1”)。

因此单个图像目录将是: H:。/ GitHub的/ CT_Mara /图像/ raw_images / A / 1 / .... .... JPG JPG .... JPG ....等

因此,理想情况下,我希望将我的图像重命名为“A1_2017-05-03 15-45-13.jpg”,如果有两张或更多具有相同名称的照片,则应将其命名为:“A1_2017-05- 03 15-45-13(1).jpg“和”A1_2017-05-03 15-45-13(2).jpg“

我想要完成的任务:

  1. 根据日期和时间重命名所有图像 exifdata $ CREATEDATE
  2. 将(1),(2)等附加到具有相同名称的图像
  3. 将电台名称和相机文件夹附加到图像中 名称
  4. 最后,作为一个单独的函数,知道我是多么好 可以在exifdata框架中创建一个新的库仑,例如a 可以识别动物的“物种”库仑
  5. 这是我正在使用的代码:

    library(lubridate)
    

    定义exif函数

    exifRip <- function(filename) {
      command <- paste("exiftool -n -csv",
                       paste(shQuote(filename), collapse=" "))
      read.csv(textConnection(system(command, intern=TRUE)),
               header = TRUE,
               sep = ",",
               quote = "",
               stringsAsFactors = FALSE)
    }
    

    从我的目录

    加载exif数据
    exifdata <- exifRip(list.files(path="H:/GitHub/CT_Mara/images/raw_images"))
    View(exifdata)
    

    设置输出目录

    outdir <- dir.create("H:/GitHub/CT_Mara/images/raw_images/EXIFdata")
    

    除了这个循环外,一切都很完美:

    for(i in 1:nrow(exifdata)) {
      row <- exifdata[i, ]
      d <- ymd_hms(row$CreateDate)
      ext <- tools::file_ext(row$SourceFile) #maintain file extension
      newname <- file.path(outdir,
                           sprintf("%04d-%02d-%02d %02d.%02d.%02d.%s",
                                   year(d), month(d), day(d), hour(d), minute(d),
                                   second(d), ext))
      file.copy(row$SourceFile, newname)
    }
    

    我收到以下错误消息:

    Error in sprintf("%04d-%02d-%02d %02d.%02d.%02d.%s", year(d), month(d),  : 
      invalid format '%04d'; use format %f, %e, %g or %a for numeric objects
    In addition: Warning message:
    All formats failed to parse. No formats found. 
    

    任何关于如何清理它的建议都将受到高度赞赏..提前致谢。

    亲切的问候, 菲利普

1 个答案:

答案 0 :(得分:0)

以下exiftool命令几乎可以为您提供所需内容而无需编写脚本。唯一的区别是重复的文件将被命名为“NAME_1”,“NAME_2”而不是“NAME(1)”,“NAME(2)”:

exiftool '-filename<%-1:1D%-1:D_${createdate}%+c.%e' -d "%Y-%m-%d %H-%M-%S" -r DIR

其中DIR是包含图像的目录的名称。如果您在Windows中,则应在第一个参数周围使用双引号而不是单引号。

在此命令中将“filename”替换为“testname”以进行干运行测试,以查看在实际重命名之前文件名是什么。