如何在R中遍历文件夹内序列文件并按每8张为一组生成GIF动画
解决方案
直接对已读取的文件列表做固定长度分组,再遍历每组生成对应GIF即可,修改后的完整代码如下:
library(magick) library(purrr) library(gifski) Folder <- "C:/Path/To/Folder/Containing/JPG/Images" setwd(Folder) # 读取所有jpg文件,sort()保证文件按名称顺序排列,可根据需求调整排序规则 # 需要遍历所有子文件夹的话,添加参数 recursive = TRUE file.jpg <- list.files(Folder, pattern = "\\.jpg$", ignore.case = TRUE, full.names = TRUE) |> sort() # 按每8张为一组拆分文件列表 group_size <- 8 file_groups <- split(file.jpg, ceiling(seq_along(file.jpg) / group_size)) # 遍历每个分组生成GIF walk(file_groups, function(group) { # 可选:如果需要过滤不足8张的分组,取消注释下行代码 # if(length(group) < 8) return() # 取组内第一张的文件名作为输出GIF名称,替换后缀为.gif output_name <- gsub("\\.jpg$", ".gif", basename(group[1]), ignore.case = TRUE) # 生成GIF group |> image_read() |> image_scale('x500') |> image_join() |> image_write_gif(output_name, delay = 1/4) })
关键改动说明
- 新增分组逻辑:通过
ceiling(seq_along(file.jpg)/8)给每个文件分配分组编号,再用split()切割为8张一组的列表,默认最后一组不足8张也会正常处理,需要过滤的话可以添加对应判断 - 新增批量输出逻辑:用
walk遍历每个分组,自动取每组第一张图片的文件名作为GIF输出名称,不需要手动指定输出文件名 - 优化文件匹配规则:把原pattern的
*.jpg改为\\.jpg$,避免匹配到文件名中间带jpg的异常文件,同时增加排序逻辑保证序列顺序符合预期
内容的提问来源于stack exchange,提问作者Lee Walston
相关产品推荐
相关产品推荐

