【问题标题】:No method named `save` found for unit type `()` in the current scope在当前范围内找不到单元类型 `()` 的名为 `save` 的方法
【发布时间】:2023-01-15 14:48:10
【问题描述】:

我想合并两个图像。我正在使用 image::imageops::overlay 板条箱:

use image::imageops::overlay;
use std::path::Path;

fn main() {
    let path1 = Path::new("~/Desktop/to-merge/image1.png");
    let path2 = Path::new("~/Desktop/to-merge/image2.png");
    let mut img1 = image::open(&path1).unwrap().clone();
    let mut img2 = image::open(&path2).unwrap().clone();
    let output = overlay(&mut img1, &mut img2, 0, 0);
    let save_path = Path::new("~/Desktop/to-crop/merged.png");
    output.save(save_path).unwrap();
}

点击 cargo run 后,我收到此错误:

错误[E0599]:在当前范围内找不到单元类型“()”的名为“save”的方法

--> 源/main.rs:11:12

|

11 | output.save(save_path).unwrap();

| ^^^^ `()` 中找不到方法

我认为编译器是在说image::imageops::overlay 没有方法save()?如果是这样,我应该改用什么?

直播码:https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=27cb003261e5c11445bd1d5029dae8ee

【问题讨论】:

    标签: rust


    【解决方案1】:

    image::imageops::overlay 改变作为第一个参数传递的图像,在其上覆盖第二个图像,并返回 ()。您需要在 img1 上调用 .save(),因为该图像现在覆盖了 img2。此外,您不需要将对img2 的可变引用传递给overlay

    use image::imageops::overlay;
    use std::path::Path;
    
    fn main() {
        let path1 = Path::new("~/Desktop/to-crop/image1.png");
        let path2 = Path::new("~/Desktop/to-crop/image2.png");
        let mut img1 = image::open(&path1).unwrap().clone();
        let img2 = image::open(&path2).unwrap().clone();
        overlay(&mut img1, &img2, 0, 0);
        let save_path = Path::new("~/Desktop/to-crop/merged.png");
        img1.save(save_path).unwrap();
    }
    

    此外,~ 不会被 Rust 自动扩展,因此您需要传递图像的完整路径。见this question

    【讨论】:

      猜你喜欢
      • 2017-03-22
      • 2017-03-16
      • 2018-07-08
      • 2019-11-16
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 2021-09-21
      相关资源
      最近更新 更多