image::imageops::overlay
对作为第一个参数传递的图像进行变异,将第二个图像覆盖在其上,然后返回
()
。你需要打电话
.save()
在…上
img1
因为那个图像现在已经
img2
覆盖在上面。此外,您不需要将可变引用传递给
img2
到
overlay
以及
.clone()
呼叫是不必要的。
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();
let img2 = image::open(&path2).unwrap();
overlay(&mut img1, &img2, 0, 0);
let save_path = Path::new("~/Desktop/to-crop/merged.png");
img1.save(save_path).unwrap();
}
而且
~
Rust不会自动展开,因此您需要传递图像的完整路径。看见
this question
。
创建
Path
也没有必要,因为这两个函数都接受
P: AsRef<Path>
,这意味着你可以通过
&str
直接:
use image::imageops::overlay;
use std::path::Path;
fn main() {
let path1 = "~/Desktop/to-crop/image1.png";
let path2 = "~/Desktop/to-crop/image2.png";
let mut img1 = image::open(&path1).unwrap();
let img2 = image::open(&path2).unwrap();
overlay(&mut img1, &img2, 0, 0);
let save_path = "~/Desktop/to-crop/merged.png";
img1.save(save_path).unwrap();
}