| Title | Optimize and Compress Images |
| Version | 0.4.5 |
| Description | 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. |
| Suggests | testit |
| License | MIT + file LICENSE |
| URL | https://github.com/yihui/tinyimg |
| BugReports | https://github.com/yihui/tinyimg/issues |
| Author | Yihui Xie |
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.
You can install the development version of {tinyimg} from r-universe.dev:
install.packages("tinyimg", repos = "https://yihui.r-universe.dev")
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"))
# 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)
# 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)
For PNG, the level parameter controls the optimization level (0-6):
0: Fast optimization with minimal compression2: Default - good balance between speed and compression6: Maximum optimization - best compression but slowerFor 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.
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.
MIT License. See LICENSE file for details.
To cite the package tinyimg in publications, please use:
Xie Y (2026). tinyimg: Optimize and Compress Images. R package version 0.4.5, https://github.com/yihui/tinyimg.
@Manual{,
title = {tinyimg: Optimize and Compress Images},
author = {Yihui Xie},
year = {2026},
note = {R package version 0.4.5},
url = {https://github.com/yihui/tinyimg},
}