rust 遍历目录下所有图片 并裁剪

180it 2024-10-24 PM 87℃ 0条

计划

  1. 使用 std::fs 库遍历目录下的所有图片文件。
  2. 使用 image 库加载每个 PNG 图片。
  3. 裁剪每个图片为两个部分。
  4. 将裁剪后的图片保存到文件系统中。

代码

# 在 Cargo.toml 中添加依赖项
[dependencies]
image = "0.23.14"
use image::{GenericImageView, ImageBuffer, Rgba};
use std::fs;
use std::path::Path;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 指定要遍历的目录
    let dir_path = "./images";

    // 遍历目录下的所有文件
    for entry in fs::read_dir(dir_path)? {
        let entry = entry?;
        let path = entry.path();

        // 检查文件是否为 PNG 图片
        if path.extension().and_then(|s| s.to_str()) == Some("png") {
            // 加载 PNG 图片
            let img = image::open(&path)?;

            // 获取图片的宽度和高度
            let (width, height) = img.dimensions();

            // 裁剪图片的左半部分
            let left_half = img.crop_imm(0, 0, width / 2, height);
            let left_half_path = path.with_file_name(format!(
                "{}_left_half.png",
                path.file_stem().and_then(|s| s.to_str()).unwrap()
            ));
            left_half.save(left_half_path)?;

            // 裁剪图片的右半部分
            let right_half = img.crop_imm(width / 2, 0, width / 2, height);
            let right_half_path = path.with_file_name(format!(
                "{}_right_half.png",
                path.file_stem().and_then(|s| s.to_str()).unwrap()
            ));
            right_half.save(right_half_path)?;
        }
    }

    Ok(())
}

说明

  1. Cargo.toml 文件中添加 image 库的依赖项。
  2. 使用 std::fs::read_dir 遍历指定目录下的所有文件。
  3. 检查文件是否为 PNG 图片。
  4. 使用 image::open 加载 PNG 图片。
  5. 使用 img.dimensions() 获取图片的宽度和高度。
  6. 使用 img.crop_imm 裁剪图片的左半部分并保存为 *_left_half.png
  7. 使用 img.crop_imm 裁剪图片的右半部分并保存为 *_right_half.png

请确保在运行代码之前安装了 image 库,并且在指定的目录(例如 ./images)下有一些 PNG 图片文件。

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

rust 遍历目录下所有图片 并裁剪