如何循环遍历r中文件夹中的一系列连续文件



我在几个文件夹中保存了大约24,000张照片(JPG)。我想做的是开发一个R脚本,它可以遍历文件夹中的所有图像,并为每组8张照片创建一个GIF动画。我已经使用magick库计算出了GIF动画代码,所以我不需要帮助。我需要帮助的是如何开发通过文件夹中的图像步骤的代码,并将它们分组为8倍。例如,如果我有一个包含24张图片的文件夹,我需要一些东西来循环遍历文件夹,根据3组8张图片创建3个GIF文件,如下所示:GIF 1:文件夹中的图片1-8GIF 2:图片9-16在文件夹中GIF 3: images 17-24文件夹

这是我到目前为止的代码,它将文件夹中的所有图像组装成一个GIF。我希望有一个简单的几行代码,可以添加,将步进每组8张图片在文件夹中产生一个GIF动画。我还想将输出的GIF文件命名为与序列中的第一张图像相同的文件名。

library (magick)
library(purrr)
library(gifski)
Folder <- "C:/Path/To/Folder/Containing/JPG/Images"
setwd(Folder)
file.jpg <- list.files(Folder, pattern ="*.jpg", ignore.case = TRUE, full.names = TRUE)
list(file.jpg)
m <- image_read(file.jpg)%>%
image_scale('x500')%>%
image_join()
image_write_gif(m, "MyGIF.gif", delay=1/4)

应该可以:

library (magick)
library(purrr)
library(gifski)
Folder <- "C:/Path/To/Folder/Containing/JPG/Images"
setwd(Folder)
file.jpg <-
list.files(
Folder,
pattern = "*.png",
ignore.case = TRUE,
full.names = TRUE
#here you have to care that the total number of images is a multiple of 8
l <- split(1:length(file.jpg),rep(1:round(length(file.jpg)/8),each=8))
for (i in l) {
new.file.jpg <- file.jpg[i]
new.file.jpg <- new.file.jpg[complete.cases(new.file.jpg)]
m <- image_read(new.file.jpg)%>%
image_scale('x500')%>%
image_join()
image_write_gif(m, paste0(tools::file_path_sans_ext(basename(new.file.jpg[1])),".gif"), delay=1/4)
}

你也可以使用lapply通过包装代码,生成gif成一个函数,但在这种情况下,我认为这是更清晰的for循环

最新更新