saveGIF()返回空GIF

时间:2019-05-27 07:54:34

标签: r animation imagemagick gif

在R中,我试图基于多个图像获得GIF动画。我编写了一个返回图像的函数,并使用动画包的saveGIF()函数创建了GIF。返回图像的函数起作用(我在查看器中看到了弹出的图像)。使用saveGIF创建GIF时,没有错误消息,但GIF为空。

 library(leaflet)
 library(mapview)
 library(animation)

  latitude = c(seq(48.13608, 52.48608, 0.00145))
  longitude = c(seq(11.57278, 13.40278, 0.00061))

  sampledf <- as.data.frame(cbind(longitude, latitude))


  plot.1 <- function(df)
  {
  for (i in seq(1,nrow(df),300)){
  m<- leaflet() %>%
  addTiles() %>%
  setView( lng = 12.48778
           , lat = 50.31108
           , zoom = 4 )    %>%

  addPolylines(data = df[1:i,],
               lng = ~longitude,
               lat = ~latitude,
               color = ~"red")

  print(m)
 }
 }

  saveGIF(plot.1(sampledf),movie.name="test.gif", interval=0.5, ani.width=1980/2, ani.height=1080/2)

1 个答案:

答案 0 :(得分:2)

这可能是一种复杂的处理方式,但是我可以通过首先为png数据创建sampledf文件,然后使用magick库来生成gif来实现。

library(leaflet)
library(mapview)
library(magick)

counter <- 1 
for (i in seq(1,nrow(sampledf),300)){

    m <- leaflet() %>%
          addTiles() %>%
          setView( lng = 12.48778
                 , lat = 50.31108
                 , zoom = 4 )    %>%
           addPolylines(data = sampledf[1:i,],
                        lng = ~longitude,
                        lat = ~latitude,
                        color = ~"red")

     mapshot(m, file = paste0("plot_", counter, ".png"))
     counter = counter + 1
}
file_names <- list.files(pattern = "plot_\\d+.png$", full.names = TRUE)

image_read(file_names) %>%
   image_animate(fps = 1) %>%
   image_write("output.gif")

enter image description here