MoosicBox Image Helper
Image processing library and command-line tool for resizing, converting, and optimizing images with support for multiple formats.
Overview
MoosicBox Image provides both a library API and CLI tool (image_helper) for image processing operations including:
- Image Resizing: Resize images while maintaining aspect ratio
- Format Conversion: Convert between JPEG and WebP formats
- Quality Control: Configurable compression quality settings
- Smart Resizing: Automatic aspect ratio calculation
- libvips Integration: High-performance image processing (Linux/macOS only; Rust bindings unavailable on Windows)
Installation
As a Library Dependency
Add to your Cargo.toml:
[]
= "0.1.4"
# Or with specific features:
= { = "0.1.4", = ["image", "libvips"] }
Available features:
image- Pure Rust image processing (default, cross-platform)libvips- High-performance libvips backend (default, Linux/macOS only)build-binary- Build theimage_helperCLI tool
From Source
# Linux/macOS (with libvips support)
# Windows (libvips Rust crate has build issues)
Dependencies
System dependencies for optimal performance:
- libvips (recommended, for high-performance processing)
- Ubuntu/Debian:
sudo apt-get install libvips-dev - macOS:
brew install vips - Windows: See libvips Windows installation
- Ubuntu/Debian:
Library Usage
The package provides both a library API and a CLI tool.
Using the Image Module
The image module provides pure Rust image processing:
use ;
// Sync resize
let bytes = try_resize_local_file?;
// Async resize
let bytes = try_resize_local_file_async.await?;
Using the libvips Module
The libvips module provides high-performance processing (Linux/macOS only):
use ;
// Resize from file path
let bytes = resize_local_file?;
// Resize from bytes
let resized = resize_bytes?;
// Read and clear the backend error buffer after failures
let last_error = get_error;
Encoding Types
use Encoding;
let encoding = Jpeg; // or Encoding::Webp
CLI Usage
Basic Usage
Resize an image to specific dimensions:
Maintain Aspect Ratio
Resize by width only (height calculated automatically):
Resize by height only (width calculated automatically):
Format Conversion
Convert between formats:
Quality Control
Set compression quality (0-100):
Complete Example
Command Line Options
| Option | Short | Description | Default |
|---|---|---|---|
--width |
-w |
Target width in pixels | Auto-calculated |
--height |
-h |
Target height in pixels | Auto-calculated |
--encoding |
-e |
Output format (JPEG, WEBP) | Auto-detect from extension |
--output |
-o |
Output file path | Required |
--quality |
-q |
Compression quality (0-100) | 80 |
Supported Formats
Input Formats
The tool supports various input formats through the image crate, including:
- JPEG (.jpg, .jpeg)
- PNG (.png)
- WebP (.webp)
- TIFF (.tiff, .tif)
- BMP (.bmp)
- GIF (.gif) - static images only
- ICO (.ico)
Output Formats
- JPEG (.jpg, .jpeg) - Good compression, lossy
- WebP (.webp) - Modern format, excellent compression
Aspect Ratio Handling
The tool intelligently handles aspect ratios:
Both Dimensions Specified
# Resize to exact dimensions (may distort image)
Width Only
# Height calculated to maintain aspect ratio
Height Only
# Width calculated to maintain aspect ratio
Neither Dimension
# Original dimensions preserved, format/quality change only
Quality Guidelines
JPEG Quality Settings
- 60-70: Good for web thumbnails, small file size
- 75-85: Good balance of quality and file size
- 85-95: High quality for photos
- 95-100: Maximum quality, larger files
WebP Quality Settings
- 50-70: Excellent compression for web use
- 70-85: High quality with good compression
- 85-100: Maximum quality
Examples
Create web thumbnails
# Create small thumbnail
# Create medium preview
Convert to modern formats
# Convert PNG to WebP for better compression
# Convert old JPEG to high-quality WebP
Batch processing script
#!/bin/bash
# The CLI processes one image at a time, but can be used in scripts
for; do
done
Album artwork optimization
# Standard album cover size
# High-res album cover
Performance
libvips vs Image Crate
- libvips: Faster processing, better memory usage (Linux/macOS only)
- image crate: Pure Rust, easier deployment, fewer dependencies, cross-platform
Memory Usage
- Optimized for large images
- libvips provides better memory management for very large files
Processing Speed
- Efficient algorithms for common operations like resizing
- libvips offers superior performance for high-volume processing
Error Handling
Common errors and solutions:
- Unsupported format: Check input file format is supported
- Permission denied: Verify read/write permissions for files
- Out of memory: Reduce image size or enable libvips for better memory usage
- Invalid dimensions: Ensure width/height values are positive integers
Integration
The image helper is used by other MoosicBox components:
- Server: Automatic album artwork optimization
- Web Interface: Dynamic image resizing for different screen sizes
- Mobile App: Thumbnail generation for better performance
See Also
- MoosicBox Server - Uses image processing for album artwork
- MoosicBox Files - File handling utilities
- libvips Documentation - High-performance image processing library