6个版本
0.5.0-rc4 | 2024年5月12日 |
---|---|
0.5.0-rc3 | 2024年4月22日 |
0.5.0-rc0 | 2024年4月7日 |
0.4.0 | 2023年11月16日 |
#527 in 图像
每月485次下载
在 zune-image 中使用
170KB
2.5K SLoC
zune-bmp
一个精简、高效且环保的BMP解码器。
此crate包含一个快速实现的BMP解码器,并包含对规范中怪异部分的电池支持
特性
- RLE支持
- 1位、4位、8位、16位、24位和32位支持
- 高性能
用法
首先将项目添加到您的库/二进制文件中
zune-bmp = "0.4" # Or use cargo add zune-bmp
然后您可以尝试其他配置
use zune_bmp::BmpDecoder;
use zune_bmp::BmpDecoderErrors;
fn main()->Result<(),BmpDecodeErrors>{
let decoder:Vec<u8> = BmpDecoder::new(b"BMP").decode()?;
}
安全性
解码器在CI中不断进行模糊测试,以确保在恶意输入的情况下不会崩溃,如果样本导致它崩溃,欢迎提出问题。
lib.rs
:
一个通用的BMP解码器
此crate具有一个能够快速解码多个BMP图像的BMP解码器
特性
no_std
默认启用,具有alloc
功能- 快速
- 最小依赖
- 非常小的内部分配。(大多数路径不会分配比输出缓冲区更多的内存)
支持格式
- RLE(4位和8位)
- 调色板图像(1位、2位、4位和8位)
- 遮罩图像(16位和32位格式)
不支持格式
- 嵌入的PNG和JPEG
- 嵌入颜色配置文件的照片。(嵌入的颜色配置文件将被忽略)
特性
log
:使用log
crate 功能在解码时打印图像信息std
:允许从实现std::io::BufRead
+std::io::Seek
的任何内容直接解码
用法
建议如果有一个内存缓冲区,您可以使用 ZCursor
来读取,因为它相对于 std::io::Cursor
来说更优化,因为它的方法专门针对 ZByteReaderTrait
。
use zune_bmp::BmpDecoder;
use zune_core::bytestream::ZCursor;
let decoder:Vec<u8> = BmpDecoder::new(ZCursor::new(b"BMP")).decode().unwrap();
您也可以直接从 bmp 文件中读取。当您没有文件内容在内存中,只想获取像素时,这可能是首选。
建议您将文件包装在 bufreader 中。
这需要 std
功能才能正常工作。
use std::fs::File;
use std::io::BufReader;
use zune_bmp::BmpDecoder;
// read from a file
let source = BufReader::new(File::open("./image.bmp").unwrap());
// only run when std is enabled, otherwise zune_core doesn't implement the ZByteReader trait
// on File since it doesn't exist in `no_std` land
#[cfg(feature = "std")]
let decoder = BmpDecoder::new(source);
安全性
解码器在CI中不断进行模糊测试,以确保在恶意输入的情况下不会崩溃,如果样本导致它崩溃,欢迎提出问题。
性能
BMP 不是一个计算密集型的图像格式,这个crate在任何可能的情况下都不应该是瓶颈,只是以防万一你认为它在任何方面都减慢了您的速度。
依赖项
~87KB