尝试将图像叠加在一起

3
我正在使用一个名为image = 0.23.14的货物库,我正在尝试将图像叠加在彼此上面。
在他们的存储库中,有一个示例,您可以将图像并排连接在一起。
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(())
}

我想知道如果我想将更多的文件合并在一起怎么办。


可能是的,取决于可用内存的限制。 - Zeppi
我发布了我需要的解决方案。基本上,我需要使用 image::imageops::overlay - IntFooBar
1个回答

3

好的,在做了一些尝试并查看了相关文档后,我发现有一个方法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();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接