image-optimizer

Crates.ioimage-optimizer
lib.rsimage-optimizer
version1.5.0
created_at2025-08-31 15:40:54.52549+00
updated_at2025-09-13 18:35:00.030401+00
descriptionCLI tool for optimizing images (JPEG, PNG, WebP, SVG)
homepagehttps://github.com/nixuuu/image-optimizer
repositoryhttps://github.com/nixuuu/image-optimizer
max_upload_size
id1818654
size169,723
Damian Plewa (nixuuu)

documentation

https://github.com/nixuuu/image-optimizer

README

Image Optimizer

A fast, parallel CLI tool for optimizing images (JPEG, PNG, WebP, SVG) written in Rust.

Features

  • Multiple formats: Supports JPEG, PNG, WebP, and SVG optimization
  • High-quality compression: Uses mozjpeg, oxipng (with zopfli compression by default), WebP encoders, and regex-based SVG optimization
  • Parallel processing: Optimizes multiple images concurrently for speed
  • Flexible output: In-place optimization or separate output directory
  • Image resizing: Optional resizing with --max-size parameter (applies to raster formats only)
  • Backup support: Create backup files before optimization
  • Quality control: Adjustable quality (1-100) or lossless compression (applies to raster formats only)
  • Progress tracking: Real-time progress bar with file-by-file status

Installation

From crates.io (Recommended)

cargo install image-optimizer

Quick Install (Linux/macOS)

curl -sSL https://raw.githubusercontent.com/nixuuu/image-optimizer/refs/heads/master/install.sh | bash

This script will:

  • Detect your platform and architecture
  • Download prebuilt binaries (if available) or build from source
  • Install to ~/.local/bin and configure your PATH

Manual Installation

System Dependencies

This tool requires system libraries for JPEG optimization:

Ubuntu/Debian:

sudo apt-get install libjpeg-dev

macOS:

brew install mozjpeg

Fedora/RHEL:

sudo dnf install libjpeg-turbo-devel

Build from Source

git clone https://github.com/nixuuu/image-optimizer.git
cd image-optimizer
cargo build --release

Usage

# Basic usage - optimize images in place
image-optimizer -i ./images -r

# Optimize to output directory with custom quality
image-optimizer -i input_dir -o output_dir --jpeg-quality 90

# Create backups and use lossless compression
image-optimizer -i images --backup --webp-lossless

# Optimize SVG files (removes metadata, comments, editor attributes)
image-optimizer -i icons/ -r

# Resize raster images to max 1920px on longer edge
image-optimizer -i photos --max-size 1920

# Use maximum PNG optimization level
image-optimizer -i images --png-optimization-level max

# Use PNG optimization without zopfli compression
image-optimizer -i images --no-zopfli

# Update to the latest version
image-optimizer --update

Options

  • -i, --input <PATH> - Input directory to scan for images
  • -o, --output <PATH> - Output directory (optional, defaults to in-place)
  • --backup - Create backup files (.bak extension)
  • --webp-lossless - Use lossless compression for WebP
  • --jpeg-quality <1-100> - JPEG quality (default: 85, applies to raster formats only)
  • -r, --recursive - Recursively scan subdirectories
  • --max-size <PIXELS> - Maximum size for longer edge (resizes if larger, applies to raster formats only)
  • --png-optimization-level <0-6|max> - PNG optimization level (default: 2, max is alias for 6)
  • --no-zopfli - Disable zopfli compression for PNG optimization
  • --update - Update to the latest version from GitHub releases

Supported Formats

Raster Images

  • JPEG (.jpg, .jpeg) - Optimized with mozjpeg for superior compression
  • PNG (.png) - Optimized with oxipng (uses zopfli compression by default, can be disabled with --no-zopfli)
  • WebP (.webp) - Optimized with Google's WebP encoder

Vector Graphics

  • SVG (.svg) - Optimized with regex-based processing that safely removes:
    • XML comments and unnecessary whitespace
    • Editor metadata (Inkscape, Adobe Illustrator, Sodipodi attributes)
    • RDF metadata blocks and temporary editing data
    • While preserving all visual elements, animations, styles, and interactive features

Performance

The tool uses parallel processing to optimize multiple images simultaneously, making it efficient for batch operations on large image collections.

Commit count: 46

cargo fmt