#image #serialization #deserialize

serialimage

用于 image 包的 DynamicImage 类型的序列化,包含额外元数据

9 个稳定版本 (3 个主要版本)

4.1.1 2024年4月14日
4.0.0 2024年4月4日
3.1.2 2024年4月4日
3.0.0 2024年1月8日
1.1.0 2023年10月4日

解析器实现 中排名第 496

每月下载量 29
用于 3 个包(通过 cameraunit

MIT/Apache

115KB
2.5K SLoC

serialimage

此包扩展了 image 包,添加了可序列化的 DynamicImageDynamicSerialImage。此外,它还实现了一个 ImageMetaData 结构,用于打包额外元数据信息。请注意,然而,元数据信息在从 DynamicSerialImage 转换到 DynamicImage 时会丢失。

DynamicSerialImage 结构内部以独立通道的形式存储图像数据,没有额外开销。类似于 image 包,内部图像缓冲区(对于 serialimageSerialImageBuffer)支持基础数据类型 u8u16f32SerialImageBuffer<u8>SerialImageBuffer<u16> 结构支持灰度和 RGB 图像。只有 RGB 图像支持 SerialImageBuffer<f32> 结构。所有三种类型都支持 Alpha 通道。

imageserialimage 数据类型之间进行转换时,只有当通道数 > 1 时才会产生内存复制开销,即图像是 RGB 或包含透明度数据,这是由于内存布局的差异。

使用方法

将以下内容添加到您的 Cargo.toml

[dependencies]
serialimage = "4.1"

并将以下内容添加到您的源代码中

use serialimage::{DynamicSerialImage, ImageMetaData};

然后,您可以创建一个新的图像元数据对象

let meta = ImageMetaData::new(...);

然后,可以从 DynamicImage 创建一个 DynamicSerialImage。例如,使用来自 Luma<u16> 像素类型图像缓冲区的 DynamicImage

let img = DynamicImage::from(ImageBuffer::<Luma<u16>, Vec<u16>>::new(10, 10)); // create DynamicImage
let mut img = DynamicSerialImage::from(img); // create DynamicSerialImage
img.set_metadata(meta); // set the metadata
let imgstr = serde_json::to_string(&img).unwrap(); // serialize
let simg: DynamicSerialImage = serde_json::from_str(&imgstr).unwrap(); // deserialize
assert_eq!(img, simg);

现在 img 可以进行完整的序列化发送了

特质

DynamicSerialImageSerialImageBuffer 实现了 TryFromTryInto 特性,用于 image::DynamicImageimage::ImageBuffer

可选功能

此外,Serial 图像类型可选支持保存为 FITS 图像(方法 savefits())。此功能默认未启用,位于 fitsio 功能标志之后。可以通过启用此功能标志来允许 FITS 图像存储。

将以下内容添加到您的 Cargo.toml 以启用此功能

[dependencies]
serialimage = { version = "4.1", features = ["fitsio"] }

FITS I/O 被隐藏在功能标志之后,以避免在 wasm 目标上的编译错误。

依赖项

~3.5–7MB
~112K SLoC