如何在Rust中保存子图像?

我从 Rust 中的图像中获得了一个子图像。虽然文档似乎没有列出方便保存子图像的方法。我是否必须读取每个像素才能写入缓冲区?

下面是我在 Playground 中的代码。

fn main() {
    
    f();
}
fn f(){
let (w,h)=(100,100);
for (x,y) in &[(100 as u32,200 as u32)]{
         let mut img = image::open("mySvg.png").unwrap();
         let subimg = imageops::crop(&mut img, *x , *y , w , h );
         let mut output = std::fs::File::create(format!("mySvg.{}.{}.png",x,y).as_str()).unwrap();
         subimg.write_to(&mut output, ImageFormat::Png).unwrap(); //Error!!
}}
 no method named `write_to` found for struct `SubImage<&mut DynamicImage>` in the current scope
  --> src/main.rs:12:17
   |
12 |          subimg.write_to(&mut output, ImageFormat::Png).unwrap(); //Error!!
   |                 ^^^^^^^^ method not found in `SubImage<&mut DynamicImage>`

回答

write_to没有为 实现该方法SubImage

但是,该方法SubImage::to_image可用,它返回一个ImageBuffer.

然后可以使用ImageBuffer::save_with_format写出文件。

我使用了Ferris的图像和以下目录结构:

.  stackoverflow_save_subimage
?? Cargo.lock
?? Cargo.toml
?? ferris.png
?? src/
?  ?? main.rs
?? target/
.  stackoverflow_save_subimage
?? Cargo.lock
?? Cargo.toml
?? ferris.png
?? src/
?  ?? main.rs
?? target/

运行上面生成以下裁剪ferris_crop.100.200.png


以上是如何在Rust中保存子图像?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>