试图将图像叠加在一起

Trying to overlay images on top of each other

我正在使用一个名为 image = 0.23.14 的货物库,我试图将图像叠加在一起。

在他们的存储库中,有一个 example 您可以并排连接图像的地方。

use image::{
  GenericImage, 
  GenericImageView, 
  ImageBuffer, 
  Pixel, 
  Primitive
};

fn h_concat<I, P, S>(images: &[I]) -> ImageBuffer<P, Vec<S>>
  where
   I: GenericImageView<Pixel = P>,
   P: Pixel<Subpixel = S> + 'static,
   S: Primitive + 'static {
  
   let mut imgbuf = image::ImageBuffer::new(100, 100);
   
   for img in images {
     imgbuf.copy_from(img, 0, 0).unwrap();
   }
   imgbug
}

fn main() -> Result<()> {
  h_concat(&[
    image::open("images/img1.png").unwrap(),
    image::open("images/img2.png").unwrap(),
  ]).save("random.png").unwrap();
  
  Ok(())
}

我想知道如果我想将更多文件附加在一起怎么办。

好的,经过一些摆弄并对文档进行更多研究之后。我确实发现有一种方法 image::imageops::overlay 可以解决我的问题。

use image::{DynamicImage, imageops};

fn h_concat(mut base: DynamicImage, imgs: &[DynamicImage]) -> DynamicImage {
  for img in imgs {
    imageops::overlay(&mut base, img, 0, 0);
  }
  base
}

fn main() -> Result<()> {
  let base = image::open("images/img1.png").unwrap();

  h_concat(base, &[
    image::open("images/img2.png").unwrap()
  ]).save("random.png").unwrap();
}