7个不稳定版本 (3个重大更改)
0.4.0 | 2024年2月8日 |
---|---|
0.3.0 | 2023年7月12日 |
0.2.1 | 2022年7月26日 |
0.1.2 | 2022年6月15日 |
0.1.0 | 2021年3月29日 |
#114 in 压缩
每月48次下载
54KB
979 代码行
rans-rs
范围非对称数字系统(rANS)编码器和解码器。底层是ryg-rans-sys的高层包装。
ANS是由雅盖隆大学Jarek Duda引入的现代熵编码方法系列。它作为算术和Huffman编码的替代方案,结合了二者的性能和压缩率。许多最近的压缩算法,如Facebook的Zstandard,Apple的LZFSE或JPEG XL,都使用ANS作为底层。
有关底层实现的详细信息,请参阅ryg_rans仓库。
用法
将以下内容添加到您的Cargo.toml
[dependencies]
rans = "0.3.0"
示例
use rans::byte_decoder::{ByteRansDecSymbol, ByteRansDecoder};
use rans::byte_encoder::{ByteRansEncSymbol, ByteRansEncoder};
use rans::{RansDecSymbol, RansDecoder, RansEncSymbol, RansEncoder, RansEncoderMulti};
const SCALE_BITS: u32 = 2;
// Encode two symbols
let mut encoder = ByteRansEncoder::new(1024);
let symbol1 = ByteRansEncSymbol::new(0, 2, SCALE_BITS);
let symbol2 = ByteRansEncSymbol::new(2, 2, SCALE_BITS);
encoder.put(&symbol1);
encoder.put(&symbol2);
encoder.flush();
let mut data = encoder.data().to_owned();
// Decode the encoded data
let mut decoder = ByteRansDecoder::new(data);
let symbol1 = ByteRansDecSymbol::new(0, 2);
let symbol2 = ByteRansDecSymbol::new(2, 2);
// Please note that the data is being decoded in reverse
assert_eq!(decoder.get(SCALE_BITS), 2); // Decoder returns cumulative frequency
decoder.advance(&symbol2, SCALE_BITS);
assert_eq!(decoder.get(SCALE_BITS), 0);
decoder.advance(&symbol1, SCALE_BITS);
许可证
该项目受MIT许可证的许可。
贡献
除非您明确声明,否则您提交给项目包含的贡献将按MIT许可,不附加任何额外条款或条件。
开发
pre-commit
我们鼓励贡献者使用预定义的pre-commit
钩子 --- 在您的本地仓库中安装它们,请确保您已安装pre-commit
并运行
pre-commit install
依赖关系
~0.3–2.4MB
~42K SLoC