Type: Package
Title: Highest Quality GIF Encoder
Version: 1.32.0-2
Description: Multi-threaded GIF encoder written in Rust: https://gif.ski/. Converts images to GIF animations using pngquant's efficient cross-frame palettes and temporal dithering with thousands of colors per frame.
License: MIT + file LICENSE
URL: https://r-rust.r-universe.dev/gifski
BugReports: https://github.com/r-rust/gifski/issues
SystemRequirements: Cargo (Rust's package manager), rustc
Encoding: UTF-8
RoxygenNote: 7.1.1
Suggests: ggplot2, gapminder
Language: en-US
NeedsCompilation: yes
Packaged: 2025-03-17 21:13:42 UTC; jeroen
Author: Jeroen Ooms ORCID iD [aut, cre], Kornel LesiƄski [aut] (Gifski Rust library), Authors of the dependency Rust crates [aut] (see AUTHORS file)
Maintainer: Jeroen Ooms <jeroenooms@gmail.com>
Repository: CRAN
Date/Publication: 2025-03-18 11:10:01 UTC

Gifski

Description

Gifski converts image frames to high quality GIF animations. Either provide input png files, or automatically render animated graphics from the R graphics device.

Usage

gifski(
  png_files,
  gif_file = "animation.gif",
  width = 800,
  height = 600,
  delay = 1,
  loop = TRUE,
  progress = TRUE
)

save_gif(
  expr,
  gif_file = "animation.gif",
  width = 800,
  height = 600,
  delay = 1,
  loop = TRUE,
  progress = TRUE,
  ...
)

Arguments

png_files

vector of png files

gif_file

output gif file

width

gif width in pixels

height

gif height in pixel

delay

time to show each image in seconds

loop

if the gif should be repeated. Set to FALSE to only play once, or a number to indicate how many times to repeat after the first.

progress

print some verbose status output

expr

an R expression that creates graphics

...

other graphical parameters passed to png

Examples

# Manually convert png files to gif
png_path <- file.path(tempdir(), "frame%03d.png")
png(png_path)
par(ask = FALSE)
for(i in 1:10)
  plot(rnorm(i * 10), main = i)
dev.off()
png_files <- sprintf(png_path, 1:10)
gif_file <- tempfile(fileext = ".gif")
gifski(png_files, gif_file)
unlink(png_files)
utils::browseURL(gif_file)


# Example borrowed from gganimate
library(gapminder)
library(ggplot2)
makeplot <- function(){
  datalist <- split(gapminder, gapminder$year)
  lapply(datalist, function(data){
    p <- ggplot(data, aes(gdpPercap, lifeExp, size = pop, color = continent)) +
      scale_size("population", limits = range(gapminder$pop)) + geom_point() + ylim(20, 90) +
      scale_x_log10(limits = range(gapminder$gdpPercap)) + ggtitle(data$year) + theme_classic()
    print(p)
  })
}

# High Definition images:
gif_file <- file.path(tempdir(), 'gapminder.gif')
save_gif(makeplot(), gif_file, 1280, 720, res = 144)
utils::browseURL(gif_file)