46 个稳定版本
新 3.10.5 | 2024 年 8 月 18 日 |
---|---|
3.10.2 | 2024 年 7 月 7 日 |
3.10.1 | 2024 年 1 月 22 日 |
3.9.2 |
|
0.3.1 |
|
34 在 图像 中排名
44,120 每月下载次数
用于 63 个 crate (直接使用 36 个)
225KB
5K SLoC
Rust 重写的 LodePNG
这是一个纯 Rust PNG 图像解码器和编码器。允许在不使用任何系统依赖项的情况下轻松读取和写入 PNG 文件。
要使用 lodepng crate,将以下内容添加到您的 Cargo.toml
[dependencies]
lodepng = "3.8"
有关详细信息,请参阅 API 参考。需要 Rust 1.64 或更高版本。
加载图像示例
let image = lodepng::decode32_file("in.png")?;
返回类型为 lodepng::Bitmap<lodepng::RGBA<u8>>
的图像,具有 .width
、.height
和 .buffer
字段(缓冲区是一个 Vec
)。
RGB/RGBA 像素类型来自 RGB crate,您可以单独导入它以在整个程序中使用相同的像素结构,而无需转换。但如果您想将图像缓冲区作为一系列原始字节读取,忽略 RGB(A) 像素结构,则使用
[dependencies]
rgb = "0.8"
use rgb::*;
…
let bytes: &[u8] = image.buffer.as_bytes();
保存图像示例
lodepng::encode32_file("out.png", &buffer, width, height)?
RGBA缓冲区可以是任何类型的切片,只要每个元素有4个字节(例如 struct RGBA
或 [u8; 4]
)并且实现了 Pod
特性。
高级
let mut state = lodepng::Decoder::new();
state.remember_unknown_chunks(true);
match state.decode_file("in.png") {
Ok(lodepng::Image::RGB(image)) => {…}
Ok(lodepng::Image::RGBA(image)) => {…}
Ok(lodepng::Image::RGBA16(image)) => {…}
Ok(lodepng::Image::Grey(image)) => {…}
Ok(_) => {…}
Err(err) => {…}
}
for chunk in state.info_png().unknown_chunks(ChunkPosition::IHDR) {
println!("{:?} = {:?}", chunk.name(), chunk.data());
}
// Color profile (to be used with e.g. LCMS2)
let icc_data = state.get_icc();
有关如何使用lodepng和色彩配置文件的示例,请参阅load_image 包。
从2.x升级
- C FFI仍然存在,但由于结构体布局的变化,不再与原始C lodepng兼容。
- 结构体使用
bool
代替0/1int
。 - 自定义zlib回调使用
io::Write
代替malloc
分配的缓冲区(请记住使用write_all
而不是write
!) ffi::Error
已重命名为ffi::ErrorCode
。- 压缩级别通过
set_level()
函数设置,而不是单独的CompressConfig
字段。
从1.x升级
CVec
已替换为常规的Vec
。删除编译器可能抱怨的额外.as_ref()
。LCT_*
常量已更改为ColorType::*
。Chunk
/Chunks
已重命名为ChunkRef
/ChunksIter
。auto_convert
是布尔值。bitdepth
有getter和setter。- 不再有C语言了!
这是一艘忒修斯之船
此代码库由Lode Vandevenne编写的C LodePNG派生而来。它已使用Citrus C to Rust转换器转换为Rust,然后进行了显著的重构,使其更符合Rust风格。因此,它现在是一个不同的库,其中包含一些原始API。
依赖项
~0.5–0.9MB
~15K SLoC