使用 Rust-Image 程序生成图像
Nilesh Katuwal
2022年6月7日
在本文中,我们将学习使用 rust-image 以程序方式生成图像。
使用 Rust-Image 程序生成图像
Crate Image
这个 crate 为图像编码和解码以及基本的图像处理功能提供了原生的 Rust 实现。README.md
文件中还提供了其他文档,可在 GitHub 上方便地查看。
该库为两个基本问题提供了解决方案:图像编码的统一接口和内容的简单通用缓冲区。每个功能都可以独立于其他功能使用。
重点放在一组小而稳定的日常操作上,额外的专用板条箱可以补充这些操作。此外,该库支持具有很少依赖性的安全解决方案。
使用 io::Reader
加载图像:
use std::io::Cursor;
use image::io::Reader as ImageReader;
let img_one = ImageReader::open("imagetest.png")?.decode()?;
let img_two = ImageReader::new(Cursor::new(bytes)).with_guessed_format()?.decode()?;
要保存图像:
img.save("theimage.jpg")?;
let mut bytes: Vec<u8> = Vec::new();
img2.write_to(&mut Cursor::new(&mut bytes), image::ImageOutputFormat::Png)?;
图像缓冲器
两种主要的图像存储格式:
- 存储静态类型图像数据的
Image buffer
。 DynamicImage
是对支持它们之间转换的受支持ImageBuffer
格式的枚举。
除了一些专门的选项:
- 可变图像缓冲区的
GenericImage
特征。 - 只读 GenericImage 引用的
GenericImageView
特征。 flat
模块,包含通用通道矩阵和外部接口的互操作性类型。
所有提供的图像处理函数都在实现 GenericImageView
和 GenericImage
特征并返回 ImageBuffer.
的类型上运行。所有图像格式解码器都实现了 ImageDecoder
特征,它提供了检索图像元数据和解码图像的基本方法。
某些格式还提供 ImageDecoderExt
实现,允许一次仅解码图像的一部分。
最关键的解码技术是:
- Dimensions:返回一个包含图像宽度和高度的元组。
2、颜色类型:返回本解码器输出的图像数据的颜色类型。 - 读取图像:将整个图像解码成一个字节数组。
动态图像
DynamicImage
枚举所有支持的 ImageBuffer<P>
类型。其精确的图像类型是在执行期间确定的。
它是打开图像时返回的类型。DynamicImage
为方便起见重新实现了所有图像处理功能。
对于 RGBA 像素,DynamicImage
实现 GenericImageView
和 GenericImage
特征。