【问题标题】:How can I image_read multiple images at once?如何一次 image_read 多张图片?
【发布时间】:2018-04-02 13:29:43
【问题描述】:

为了使用 magick 包创建 .gif,我如何一次读取多个图像?

我在列表对象中成功导入它们,但收到来自image_animate() 的错误。

# read all files in folder (only .png files)
capturas <- list.files("./path/to/images/")

# get all images in a list
images <- vector()
for (i in seq_along(capturas)) {
  images[i] <- list(image_read(str_c("./path/to/images/", capturas[i])))}

image_animate(image_scale(images, "500x500"), fps = 1, dispose = "previous")

得到以下错误:

> image_animate(image_scale(images, "500x500"), fps = 2, dispose = "previous")
Error: The 'image' argument is not a magick image object.

虽然在每张图片上分别使用image_read 可以正常工作...

img_1 <- image_read(str_c("./path/to/images/", capturas[1]))
img_2 <- image_read(str_c("./path/to/images/", capturas[2]))
img_3 <- image_read(str_c("./path/to/images/", capturas[3]))
img <- c(img_1, img_2, img_3)
img <- image_scale(img, "300x300")

【问题讨论】:

  • 您有语法错误。以上for,做images &lt;- vector("list", length(capturas))。然后,在循环体中,假设所有内容(image_read 等)都是正确的,请执行 images[i] &lt;- image_read(str_c("./path/to/images/", capturas[i]))
  • 执行此操作时出现此错误:Error in images[i] &lt;- image_read(str_c("./path/to/images/", : cannot coerce type 'externalptr' to vector of type 'list'

标签: r image imagemagick


【解决方案1】:

您可以使用 magick 包中的image_join 创建一个多帧图像,您可以在image_animate 命令中使用。我使用了purrr 包而不是循环。

library(purrr)
library(magick)
capturas <- list.files("./path/to/images/", pattern = "\\.png$")

# get all images in a list
images <- map(capturas, image_read)
images <- image_join(images)

image_animate(images, fps = 1, dispose = "previous")

【讨论】:

  • 如何保存 image_animate 的输出?
  • myanimation &lt;- image_animate(images, fps = 1, dispose = "previous"),然后:image_write(myanimation, "myfilename.gif")
【解决方案2】:

这个适合我

library(magick)

#Get the list of all images: (".jpg", ".png", etc) 
allFiles = list.files(path = "./path/to/images/", pattern = ".jpg", full.names = T)

#Get the dataframe with info
allInfo = image_info(image_read(allFiles))

#Read the images 
my_images = image_read(allFiles)

改编自:https://community.rstudio.com/t/import-multiple-images-in-a-folder-and-image-info/43129/2

如果需要动画:

animation <- image_animate(image_scale(my_images, "200x200"), fps = 1) 
animation

保存动画:

image_write(animation, "./path/to/output/test1.gif")

【讨论】:

    猜你喜欢
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    • 2022-08-18
    • 2018-10-06
    • 2016-09-07
    • 1970-01-01
    相关资源
    最近更新 更多