用 Magick 制作的 R Gif 动态注释文本

Posted

技术标签:

【中文标题】用 Magick 制作的 R Gif 动态注释文本【英文标题】:Dynamic Annotation Text for R Gif Made with Magick 【发布时间】:2020-03-17 23:09:11 【问题描述】:

我有一些非常基本的代码,可以从文件夹中读取文件并使用 magick 包制作 gif。它会生成 gif,但我不知道如何使注释 (image_annotate) 动态化。例如,我希望它不是每个图像的“CAIDD_A”,而是“CAIDD_A_YYYY”,每个图像都会更新年份。

library(dplyr)
library(purrr) 
library(magick)
library(animation)

chennai_gif <- list.files(path="CAIDD_A",pattern = "*.tif", full.names = T) %>% 
  map(image_read) %>% 
  image_join() %>% 
  image_annotate("CAIDD", location =geometry_point(500,400), size = 42, color = "black") %>%
  image_animate(fps=2, loop=10) %>% 
  image_write("CAIDD_A.gif") 

我尝试为注释创建一个字符向量,但出现以下错误:

Error in magick_image_annotate(image, text, gravity, location, degrees,  : 
  Expecting a single string value: [type=character; extent=43].

此代码有效,但它只是将整个字符串注释到图像...

Title =seq(2018,2060,by=1)
Title = toString(Title)

chennai_gif <- list.files(path="CAIDD_A",pattern = "*.tif", full.names = T) %>% 
  map(image_read) %>% 
  image_join() %>% 
  image_annotate(text=Title, location =geometry_point(500,400), size = 42, color = "black") %>%
  image_animate(fps=2, loop=10) %>% 
  image_write("CAIDD_A.gif") 

【问题讨论】:

您从哪里获得Year?这是Year 图像名称的一部分吗?根据image_annotate的文档:text可以是长度等于'image'或长度为1的字符向量 @yifyan 是的,年份是文件名的一部分。我认为应该有一种方法可以使注释成为向量,但是当我尝试这样做时,它不起作用。你有例子吗? 【参考方案1】:

使用stringr 包中的str_c() 怎么样? (或者paste0() 带有基数 R。)例如:

library(stringr)
year <- str_extract(Sys.Date(), "\\d4")

chennai_gif <- list.files(path="CAIDD_A",pattern = "*.tif", full.names = T) %>% 
  map(image_read) %>% 
  image_join() %>% 
  image_annotate("CAIDD", location =geometry_point(500,400), size = 42, color = "black") %>%
  image_animate(fps=2, loop=10) %>% 
  image_write(str_c("CAIDD_A.gif", year))

【讨论】:

我需要与文件名相关的年份(总共 43 个)显示在 gif 的每张图片上。

以上是关于用 Magick 制作的 R Gif 动态注释文本的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

Magick.net 调整 GIF 大小,最终文件更大

R语言使用magick包的image_annotate函数在图片中添加文本标签信息自定义文本标签内容的位置色彩(Text annotations)

在使用自制软件安装的 Mac 上使用 Image::Magick 注释图像