在 Rust 中处理图像:image 库及其他

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 Rust 中处理图像:从加载到滤镜



Rust 是一种现代系统语言,不仅在 Web 开发和系统编程中越来越受欢迎,在多媒体处理领域也是如此。凭借其高性能和安全性,Rust 非常适合处理图像相关的任务。在本文中,我们将介绍关键库和工具,它们能够高效地处理位图图形。



主要库:image



image 库是 Rust 生态系统中处理图像的事实标准。它支持数十种格式(PNG、JPEG、GIF、BMP、WebP、TIFF 等),并提供了用于加载、处理和保存图像的便捷 API。



安装 — 在 Cargo.toml 中添加:



[dependencies]image = "0.25"


加载和保存图像



我们来看一下基本操作:打开文件、调整大小并保存为其他格式。



use image::{DynamicImage, GenericImageView};use std::path::Path;

fn main() { // 加载图像 let img = image::open("input.jpg").expect("无法打开文件");

// 输出信息 println!("尺寸: {}x{}", img.width(), img.height()); println!("色彩模式: {:?}", img.color());

// 调整大小为 200x200(保持比例) let resized = img.resize(200, 200, image::imageops::FilterType::Lanczos3);

// 保存为 PNG resized.save("output.png").expect("保存错误");}


基本处理操作



image 库提供了 imageops 模块,其中包含一组现成的滤镜和变换。



  • 旋转和翻转:


use image::DynamicImage;

fn rotate_and_flip(img: &DynamicImage) { // 顺时针旋转 90 度 let rotated = img.rotate90(); // 水平翻转 let flipped = img.fliph(); // 垂直翻转 let flipped_v = img.flipv();}


  • 裁剪:


fn crop_example(img: &DynamicImage) {    // 裁剪矩形:x=50, y=30, 宽度=200, 高度=150    let cropped = img.crop_imm(50, 30, 200, 150);    cropped.save("cropped.png").unwrap();}


  • 调整亮度和对比度:


fn adjust_brightness(img: &DynamicImage) {    // 增加亮度 50(值可以为负)    let brighter = image::imageops::brighten(img, 50);    // 增加对比度    let contrasted = image::imageops::contrast(img, 1.5);}


滤镜和效果



该库包含几个内置滤镜。以下是一些最有用的示例:



use image::imageops::FilterType;

fn apply_filters(img: &DynamicImage) { // 高斯模糊(sigma = 2.0) let blurred = image::imageops::blur(img, 2.0);

// 锐化 let sharpened = image::imageops::unsharpen(img, 5.0, 2);

// 转换为灰度 let gray = img.grayscale();

// 应用阈值滤镜(二值化) let threshold = image::imageops::threshold(img, 128);

// 保存所有结果 blurred.save("blurred.png").unwrap(); sharpened.save("sharpened.png").unwrap(); gray.save("gray.png").unwrap();}


直接操作像素



如果您需要完全控制每个像素,该库允许访问原始数据:



use image::Rgba;

fn pixel_manipulation(mut img: image::RgbaImage) { for pixel in img.pixels_mut() { // 反转颜色 pixel[0] = 255 - pixel[0]; // 红色 pixel[1] = 255 - pixel[1];

推荐