Как мне создать GIF из нескольких PNG в R? - PullRequest
0 голосов
/ 20 сентября 2019

Я разработал код для создания анимированной дорожки на карте мира.Который я сначала сохраняю как .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 только с одним изображением с этой ошибкой:

Предупреждающее сообщение: Вif (col == "jet") col = colorRampPalette (c ("# 00007F", "blue",: условие имеет длину> 1, и будет использоваться только первый элемент

1 Ответ

1 голос
/ 21 сентября 2019

Вот как вы можете это сделать (в зависимости от источника 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;Я не рекомендую этого, потому что вы действительно не знаете, что еще будет в каталоге, и они могут не отображаться в нужном вам порядке.Поскольку вы создали кадры и знаете их имена, используйте эти имена в правильном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...