用 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包的image_annotate函数在图片中添加文本标签信息自定义文本标签内容的位置色彩(Text annotations)