使用 Rust-Image 程序生成图像

Nilesh Katuwal 2022年6月7日
使用 Rust-Image 程序生成图像

在本文中,我们将学习使用 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)?;

图像缓冲器

两种主要的图像存储格式:

  1. 存储静态类型图像数据的 Image buffer
  2. DynamicImage 是对支持它们之间转换的受支持 ImageBuffer 格式的枚举。

除了一些专门的选项:

  1. 可变图像缓冲区的 GenericImage 特征。
  2. 只读 GenericImage 引用的 GenericImageView 特征。
  3. flat 模块,包含通用通道矩阵和外部接口的互操作性类型。

所有提供的图像处理函数都在实现 GenericImageViewGenericImage 特征并返回 ImageBuffer. 的类型上运行。所有图像格式解码器都实现了 ImageDecoder 特征,它提供了检索图像元数据和解码图像的基本方法。

某些格式还提供 ImageDecoderExt 实现,允许一次仅解码图像的一部分。

最关键的解码技术是:

  1. Dimensions:返回一个包含图像宽度和高度的元组。
    2、颜色类型:返回本解码器输出的图像数据的颜色类型。
  2. 读取图像:将整个图像解码成一个字节数组。

动态图像

DynamicImage 枚举所有支持的 ImageBuffer<P> 类型。其精确的图像类型是在执行期间确定的。

它是打开图像时返回的类型。DynamicImage 为方便起见重新实现了所有图像处理功能。

对于 RGBA 像素,DynamicImage 实现 GenericImageViewGenericImage 特征。