Optimize and Compress Images

Optimize and compress images using 'Rust' libraries to reduce file sizes while maintaining image quality. Supports PNG palette reduction and dithering via the 'exoquant' crate before lossless PNG optimization via the 'oxipng' crate, and JPEG re-encoding via the 'mozjpeg' crate. The package provides functions to optimize individual image files or entire directories, with configurable compression levels. Use tinyimg() as a convenient entry point for mixed PNG/JPEG workflows.


tinyimg

R-CMD-check

An R package for optimizing and compressing images using Rust libraries. Supports PNG optimization via exoquant (lossy palette reduction) and oxipng (lossless optimization), and JPEG re-encoding via mozjpeg.

Installation

You can install the development version of {tinyimg} from r-universe.dev:

install.packages("tinyimg", repos = "https://yihui.r-universe.dev")

Usage

Optimize PNG and JPEG images

library(tinyimg)

# Optimize all images in a directory (PNG and JPEG)
tinyimg("path/to/directory")

# Optimize specific files (mixed formats)
tinyimg(c("photo.jpg", "diagram.png"))

PNG optimization

# Create a test PNG
tmp = tempfile()
png(tmp, width = 400, height = 400)
plot(1:10)
dev.off()

# Optimize with different levels (lossless)
tinypng(tmp, paste0(tmp, "-o1.png"), level = 1)
tinypng(tmp, paste0(tmp, "-o6.png"), level = 6)
# Lossy
tinypng(tmp, paste0(tmp, "-lossy.png"), lossy = 2.3)

JPEG optimization

# Create a test JPEG
tmp = tempfile(fileext = ".jpg")
jpeg(tmp, width = 400, height = 400)
plot(1:10)
dev.off()

# Optimize with default quality (75)
tinyjpg(tmp)

# Optimize to a new file at a lower quality
tinyjpg(tmp, paste0(tmp, "-q60.jpg"), quality = 60)

Optimization levels and quality

For PNG, the level parameter controls the optimization level (0-6):

  • 0: Fast optimization with minimal compression
  • 2: Default - good balance between speed and compression
  • 6: Maximum optimization - best compression but slower

For JPEG, the quality parameter (0-100) controls the trade-off between quality and file size; higher quality means larger files and vice versa.

See the benchmark results (for png and jpeg) for detailed comparisons, and ?tinyimg for full documentation.

For Package Developers

When installing from GitHub via remotes::install_github("yihui/tinyimg"), the package will automatically create the vendor directory if Rust is installed on your system.

If you're developing and need to manually create the vendor directory:

# Run the update script to create vendor/ directory
./src/rust/update-vendor.sh

This creates the local vendor/ directory needed for development. Neither vendor/ nor vendor.tar.xz are tracked in git.

License

MIT License. See LICENSE file for details.

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.

install.packages("tinyimg")

0.4 by Yihui Xie, 6 months ago


https://github.com/yihui/tinyimg


Report a bug at https://github.com/yihui/tinyimg/issues


Browse source code at https://github.com/cran/tinyimg


Authors: Yihui Xie [aut, cre, cph] (ORCID: , URL: https://yihui.org) , Authors of the dependency Rust crates [ctb, cph] (see AUTHORS file)


Documentation:   PDF Manual  


MIT + file LICENSE license


Suggests testit

System requirements: Cargo (Rust's package manager), rustc


Suggested by litedown.


See at CRAN