Search code examples
rmagick

Writing multiple images using Magick on R


I have a excel list of sentences and I am trying to annotate each one onto the same template image and save each image file individually (i.e. I will have 20 images, with the same background but different text - akin to Word's Mail Merge feature with documents).

To do this, I am using the R package magick's image_annotate and image_write commands. My assumption was that putting it into a for loop would accomplish this task.

I used the following code:

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")
}

However I get the error:

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

I am not entirely sure what I am doing wrong and would highly appreciate any help on this or any possible alternative solutions. Thanks in advance.


Solution

  • You need to replace the object you're writing with each iteration, but write to a new filename each time:

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