我想合并两个图像。我使用的是图像箱中的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
后,我得到这个错误:
error[E0599]: no method named `save` found for unit type `()` in the current scope
--> src/main.rs:11:12
|
11 | output.save(save_path).unwrap();
| ^^^^ method not found in `()`
我认为编译器是在说image::imageops::overlay
没有save()
方法?如果是这样,我应该用什么来代替?
Playground
1条答案
按热度按时间ecfdbz9o1#
image::imageops::overlay
改变作为第一个参数传递的图像,覆盖第二个图像,并返回()
。您需要在img1
上调用.save()
,因为该图像现在覆盖了img2
。此外,您不需要将对img2
的可变引用传递给overlay
,因此.clone()
调用是不必要的。另外,Rust不会自动扩展
~
,所以你需要把完整的路径传递给图片,参见this question。创建
Path
也是不必要的,因为两个函数都接受P: AsRef<Path>
,这意味着可以直接传递&str
: