【问题标题】:r piping image_annotate doesn't work as expectedr 管道 image_annotate 没有按预期工作
【发布时间】:2018-04-05 21:54:06
【问题描述】:

我正在尝试使用magick 从一堆图像中创建一个动画 gif。它工作得很好,但我想在创建 gif 之前为每个图像注释文本(基本上是文件名) - 这不起作用。

我找不到错误的原因(如下) - 不确定是管道符号、映射函数还是其他原因。

library(purrr)
library(magick)

#set working directory with a couple of png's
#This works:
image_read("image1.png") %>% image_annotate("Text")    

#and this works too:
list.files(path = "", pattern = "*.png", full.names = T) %>% 
      map(image_read) %>%
      image_join() %>% 
      image_animate(fps=1) %>% 
      image_write("animated.gif")

#but this doesn't:
list.files(path = "", pattern = "*.png", full.names = T) %>% 
      map(image_read) %>%
      map(image_annotate("Text")) %>%
      image_join() %>% 
      image_animate(fps=1) %>% 
      image_write("animated.gif")

我收到此错误: Error in inherits(image, "magick-image") : argument "image" is missing, with no default

【问题讨论】:

    标签: r imagemagick animated-gif purrr piping


    【解决方案1】:

    在我看来,错误可能在于嵌套地图。

    由于image_read期间已经映射过,image_annotate无需再次映射,

    编辑 所以我们需要对映射的image_read返回的列表中的每个元素应用函数image_annotate。尝试将map(image_annotate("Text") %>% 替换为:

    lapply(image_annotate("Text")) %>%
    

    lapply(. %>% image_annotate("Text")) %>%
    

    Reference for lapply()

    【讨论】:

    • 我是这么认为的 - 但我得到了错误:Error: The 'image' argument is not a magick image object.
    • aah 是的,我错过了一步,已经编辑了我的答案,让我知道它是否有效 :)
    • 谢谢 - 第一个没用,但第二个成功了!有没有办法注释文件名而不是“文本”?
    • 是的,任何字符串变量都可以使用。例如,您可以将每个文件名存储到一个字符串并使用它。
    • 它可能值得一个更大的单独答案,因为它与原始问题并不完全相关。也许发布另一个问题?
    猜你喜欢
    • 2011-12-17
    • 2018-12-19
    • 2015-05-04
    • 2011-07-24
    • 2021-06-07
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多