Rust有哪些好用的图片压缩库
最近在做一个需要用Rust处理图片的项目,需要压缩图片减小体积。请问Rust生态中有哪些好用的图片压缩库?最好能支持常见的格式如JPEG、PNG,并且压缩效果和性能都不错的。如果有使用示例或对比评测就更好了。
2 回复
推荐几个Rust图片压缩库:
- image - 最常用,支持多种格式和压缩算法
- mozjpeg - 专门针对JPEG优化,压缩效果好
- oxipng - PNG优化工具,无损压缩
- webp - Google的WebP格式支持
其中image库功能最全面,适合日常使用。
在 Rust 生态中,有几个高效且易用的图片压缩库,以下是主要推荐:
1. image
- 特点:Rust 官方推荐的图像处理库,支持多种格式(如 JPEG、PNG、WebP),提供压缩、缩放和格式转换功能。
- 适用场景:通用图像处理,压缩效果可通过调整质量参数实现。
- 示例代码:
use image::{ImageOutputFormat, load_from_memory}; fn compress_image(data: &[u8]) -> Vec<u8> { let img = load_from_memory(data).unwrap(); let mut compressed = Vec::new(); img.write_to(&mut compressed, ImageOutputFormat::Jpeg(85)).unwrap(); // JPEG 质量 85% compressed }
2. mozjpeg
- 特点:基于 MozJPEG 的绑定,专注于 JPEG 高效压缩,支持渐进式编码和优化。
- 适用场景:需要高质量 JPEG 压缩,例如网页图片优化。
- 示例代码:
use mozjpeg::{Compress, ColorSpace}; fn compress_jpeg(data: &[u8], width: u32, height: u32) -> Vec<u8> { let mut comp = Compress::new(ColorSpace::JCS_RGB); comp.set_size(width as usize, height as usize); comp.set_quality(80.0); // 设置压缩质量 comp.set_optimize_scans(true); comp.start_compress(); comp.write_scanlines(data); comp.finish_compress().unwrap() }
3. oxipng
- 特点:无损 PNG 优化工具,通过减少文件大小而不损失质量。
- 适用场景:PNG 图片压缩,支持多线程处理。
- 示例代码:
use oxipng::{optimize_from_memory, Options}; fn compress_png(data: &[u8]) -> Vec<u8> { let options = Options::default(); // 可自定义压缩级别 optimize_from_memory(data, &options).unwrap() }
4. webp
- 特点:WebP 格式编码库,支持有损和无损压缩,通常比 JPEG/PNG 更高效。
- 适用场景:现代 Web 应用,追求更高压缩率。
- 示例代码:
use webp::{Encoder, WebPMemory}; fn encode_webp(data: &[u8], width: u32, height: u32) -> WebPMemory { let encoder = Encoder::from_rgb(data, width, height); encoder.encode(85.0) // 质量参数 0-100 }
选择建议:
- 通用压缩:使用
image库,简单灵活。 - JPEG 优化:
mozjpeg适合高质量需求。 - PNG 无损压缩:
oxipng是首选。 - 现代格式:
webp适合 Web 环境。
根据具体格式和需求选择合适的库,多数可通过 Cargo.toml 直接添加依赖使用。

