如何在 R 中从多个 PNG 创建 GIF?

  • 本文关键字:PNG 创建 GIF r imagemagick
  • 更新时间 :
  • 英文 :


我开发了一个代码来在世界地图上创建一个动画轨道。我首先将其另存为.png,然后想将其转换为.gif文件。

我下载了ImageMagick并尝试了此处的建议:从R中的一系列情节创建电影,但无法使其工作。有人可以帮助我吗?

这是我的图书馆:

library(purrr)
library(magick)
library(ggplot2)
library(animation)
library(png)
library(caTools) # for write.gif  

我的数据帧是坐标,所以像这样:

x       y
1   100.3   13.4
2   101.3   13.3
3   101.4   13.2
4   101.4   13.0
5   102.4   12.9
6   102.4   12.7
7   103.5   12.5
8   103.5   12.4
9   105.5   12.2
10  105.5   12.1        
MP <- NULL
mapWorld <- borders("world", colour="gray50", fill="gray50")
mp <- ggplot() +   mapWorld
for (i in 1:10) {
MP[i] <- mp + geom_point(aes(x=df$x[i*10], y=df$y[i*10]) ,color="blue", size=1) 
picture_name <- paste0("newsheet",i,".png")
png(filename=picture_name)
MP[[i]]
dev.off()
}
all_images <- list.files(path = "./", pattern = "*.png", full.names = T)
P1 <- readPNG(all_images)

我期望有一个 gif 一次在世界地图上显示为蓝点,但到目前为止我唯一得到的是 R 只用一张图像解释 P1,出现此错误:

警告消息: In if (col == "jet"( col = colorRampPalette(c("#00007F", "blue", : 条件的长度> 1,并且仅使用第一个元素

以下是您可以做到这一点的方法(基于rgl::movie3d的来源(:

filenames <- paste0("newsheet", 1:10, ".png")
m <- magick::image_read(filenames[1])
for (i in 2:10) 
m <- c(m, magick::image_read(filenames[i]))
m <- magick::image_animate(m, fps = 10, loop = 1, dispose = "previous")
magick::image_write(m, "movie.gif")

您使用list.files将文件名向量放在一起;我不建议这样做,因为您真的不知道目录中还有什么,而且它们可能不会按您想要的顺序显示。 由于您生成了帧并知道它们的文件名,因此请按正确的顺序使用这些名称。

最新更新