在 R 上使用 Magick 编写多个图像

Posted

技术标签:

【中文标题】在 R 上使用 Magick 编写多个图像【英文标题】:Writing multiple images using Magick on R 【发布时间】:2020-04-10 12:07:54 【问题描述】:

我有一个 excel 句子列表,我正在尝试将每个句子注释到同一个模板图像上并单独保存每个图像文件(即我将有 20 个图像,具有相同的背景但不同的文本 - 类似于 Word 的邮件合并带有文档的功能)。

为此,我使用 R 包 magickimage_annotateimage_write 命令。我的假设是把它放到for 循环中就可以完成这个任务。

我使用了以下代码:

QuoteList=read.csv("wordlist.csv", stringsAsFactors = F, header = T)

myTemplate=image_read("template.png")

for (i in 1:nrow(QuoteList))

  thisImage[i]=image_annotate(myTemplate, QuoteList$myquote[i])
  image_write(thisImage[i], format = "png")

但是我得到了错误:

Error in magick_image_replace(x, i, value) : subscript out of bounds

我不完全确定我做错了什么,并且非常感谢对此或任何可能的替代解决方案的任何帮助。提前致谢。

【问题讨论】:

【参考方案1】:

您需要在每次迭代中替换您正在编写的对象,但每次都写入一个新的文件名:

for (i in 1:nrow(QuoteList))
  thisImage = image_annotate(myTemplate, QuoteList$myquote[i])
  image_write(thisImage, format <- "png", path = paste0(i, ".png"))

【讨论】:

非常感谢,这有效。我对这些循环不是很精通!出于好奇,pastepaste0 有什么区别?助手似乎只是说它是相同的,但做得更“有效”。这是我第一次看到paste0 不客气! paste0 默认情况下假定字符之间没有分隔,我认为它通常也需要较少的参数。

以上是关于在 R 上使用 Magick 编写多个图像的主要内容,如果未能解决你的问题,请参考以下文章

R:使用magick在1个面板中显示4个png图像

如何使用 R 中的 magick 包在图像边缘添加羽毛?

R语言使用magick包的image_write函数将已有图像以任何指定的格式导出保存到磁盘上(例如将原文将从png转化为jpeg)

R magick:在没有矢量化的情况下合成图像

R语言使用magick包的image_scale函数对图像进行缩放(resize)可以自定义从宽度或者高度角度进行缩放

R语言使用magick包的image_append函数把多张图片纵向并排组合起来形成合成图像(Stack images on top of each other)