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 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.
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.shThis 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.