画像ファイルからGIFアニメーションの作成

作成済みの画像ファイルを連結してGIFアニメーションを作成する方法を紹介します。

始めにサンプルとする画像ファイルを10枚作成します。作成しました画像ファイルは D:/gif-anime に保存します。

set.seed(20240618)
library(ggplot2)
library(dplyr)
n <- 10
x <- seq(n) %>% as.factor()
y0 <- rnorm(n)
barcol <- scales::hue_pal()(n)
for (iii in seq(n)) {
  y <- y0
  y[setdiff(seq(n), seq(iii))] <- 0
  g <- ggplot(mapping = aes(x = x, y = y, fill = x)) +
    geom_bar(stat = "identity") +
    ylim(range(y0)) +
    geom_hline(yintercept = 0) +
    labs(title = paste0("x = ", iii)) +
    scale_fill_manual(values = barcol) +
    theme(legend.position = "none")
  print(g)
  ggsave(filename = paste0(formatC(x = iii, width = 2, flag = "0"), ".png"), plot = g, path = "D:/gif-anime")
}
Figure 1
Figure 2
Figure 3
Figure 4
Figure 5
Figure 6
Figure 7
Figure 8
Figure 9
Figure 10

保存された画像ファイル名を確認します。

imagefiles <- list.files(path = "D:/gif-anime", pattern = "*.png", full.names = TRUE)
imagefiles %>% matrix()
      [,1]                 
 [1,] "D:/gif-anime/01.png"
 [2,] "D:/gif-anime/02.png"
 [3,] "D:/gif-anime/03.png"
 [4,] "D:/gif-anime/04.png"
 [5,] "D:/gif-anime/05.png"
 [6,] "D:/gif-anime/06.png"
 [7,] "D:/gif-anime/07.png"
 [8,] "D:/gif-anime/08.png"
 [9,] "D:/gif-anime/09.png"
[10,] "D:/gif-anime/10.png"

パッケージ magick を利用し上記10枚の画像ファイルを連結してGIFアニメーションを作成します。

参照しました資料はこちらです。 https://stackoverflow.com/questions/56389470/convert-multiple-png-to-gif-as-an-animation-in-r

パッケージのバージョンを確認します。

packageVersion("magick")
[1] '2.8.1'

GIFアニメーションを作成します。

imagefiles %>%
  magick::image_read() %>% # 画像ファイルすべての読み込み
  magick::image_join() %>% # 画像ファイルの結合
  magick::image_animate(fps = 2) # アニメーションのための設定
Figure 11

GIFアニメーションを保存する場合は image_write {magick} を利用します.

imagefiles %>%
  magick::image_read() %>%
  magick::image_join() %>%
  magick::image_animate(fps = 2) %>%
  magick::image_write(path = "D:/gif-anime/animation-by-magick.gif")
list.files(path = "D:/gif-anime", pattern = "*.gif", full.names = TRUE)
[1] "D:/gif-anime/animation-by-magick.gif"

以上です。