如何在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: