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)
115KB
2.5K SLoC
serialimage
此包扩展了 image
包,添加了可序列化的 DynamicImage
:DynamicSerialImage
。此外,它还实现了一个 ImageMetaData
结构,用于打包额外元数据信息。请注意,然而,元数据信息在从 DynamicSerialImage
转换到 DynamicImage
时会丢失。
DynamicSerialImage
结构内部以独立通道的形式存储图像数据,没有额外开销。类似于 image
包,内部图像缓冲区(对于 serialimage
是 SerialImageBuffer
)支持基础数据类型 u8
、u16
和 f32
。SerialImageBuffer<u8>
和 SerialImageBuffer<u16>
结构支持灰度和 RGB 图像。只有 RGB 图像支持 SerialImageBuffer<f32>
结构。所有三种类型都支持 Alpha 通道。
在 image
和 serialimage
数据类型之间进行转换时,只有当通道数 > 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
可以进行完整的序列化发送了
特质
DynamicSerialImage
和 SerialImageBuffer
实现了 TryFrom
和 TryInto
特性,用于 image::DynamicImage
和 image::ImageBuffer
。
可选功能
此外,Serial
图像类型可选支持保存为 FITS 图像(方法 savefits()
)。此功能默认未启用,位于 fitsio
功能标志之后。可以通过启用此功能标志来允许 FITS 图像存储。
将以下内容添加到您的 Cargo.toml
以启用此功能
[dependencies]
serialimage = { version = "4.1", features = ["fitsio"] }
FITS I/O 被隐藏在功能标志之后,以避免在 wasm
目标上的编译错误。
依赖项
~3.5–7MB
~112K SLoC