在 Rust 中处理图像:库、工具与实践示例
Rust 是一种现代系统编程语言,越来越多地被用于图形和图像处理任务。凭借其高性能、内存安全性和丰富的 crate 生态系统,Rust 非常适合构建图像处理工具:从简单的格式转换器到复杂的滤镜和计算机视觉算法。
在本文中,我们将介绍 Rust 中用于图像处理的关键库,探讨它们的功能,并提供可运行的代码示例。
主要的图像处理库
Rust 生态系统提供了几个成熟的图像处理 crate。其中最流行的有:
- image — 用于加载、保存和基本图像转换的基础库。支持 PNG、JPEG、GIF、BMP、ICO、TIFF 等格式。
- photon-rs — 用于应用照片滤镜和特效的高性能库。可在 Rust 和 WebAssembly 上运行。
- imageproc — image 的扩展,提供高级算法:霍夫变换、分割、形态学操作。
- rusttype — 用于处理字体和在图像上渲染文本的库。
安装与配置
在 Cargo.toml 文件中添加依赖:
[dependencies]image = "0.25"photon-rs = "0.3"imageproc = "0.25"加载、调整大小和保存图像
从一个基础示例开始——加载图像,将其缩小一半,并以另一种格式保存。
use image::{DynamicImage, GenericImageView, ImageFormat};use std::fs::File;
fn main() -> Result<(), Box<dyn std::error::Error>> { // 加载图像 let img = image::open("input.jpg")?; println!("尺寸: {} x {}", img.width(), img.height());
// 缩放至原始尺寸的一半 let resized = img.resize_exact( img.width() / 2, img.height() / 2, image::imageops::FilterType::Lanczos3 );
// 以 PNG 格式保存 let mut output = File::create("output.png")?; resized.write_to(&mut output, ImageFormat::Png)?;
println!("完成!已保存为 output.png"); Ok(())}使用 photon-rs 应用照片滤镜
photon-rs 库允许快速应用滤镜、调整颜色和添加特效。
use photon_rs::PhotonImage;use photon_rs::transform::resize;use photon_rs::filters::filter;
fn main() { // 打开图像 let mut img = photon_rs::open_image("input.jpg");
// 应用“棕褐色”滤镜 filter(&mut img, "sepia", 1.0);
// 调整亮度 photon_rs::channels::brighten(&mut img, 30);
// 调整大小 let resized = resize(&img, 800, 600, photon_rs::transform::SamplingFilter::Nearest);
// 保存结果 photon_rs::save_image(resized, "output_photon.jpg"); println!("滤镜已应用,已保存至 output_photon.jpg");}像素操作与绘图
有时需要直接操作像素或绘制基本图形。为此,我们将 image 与 imageproc 结合使用。
use image::{RgbImage, Rgb};use imageproc::drawing::draw_filled_circle_mut;
fn main() { // 创建一个 400x300 的空白图像,背景为白色 let mut img = RgbImage::new(400, 300);
// 将背景填充为浅蓝色 for pixel in img.pixels_mut() { *pixel = Rgb([200, 220, 255]); }
// 绘制一个红色圆形 (x=200, y=150, 半径=80) draw_filled_circle_mut( &mut img,\