No description
.github/workflows | ||
assets | ||
bench | ||
doc | ||
ext | ||
fuzz | ||
src | ||
tests | ||
.gitignore | ||
.gitmodules | ||
Cargo.toml | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
README.md | ||
rustfmt.toml |
qoi-fast
Fast encoder/decoder for QOI image format, implemented in pure and safe Rust.
Quick summary:
- One of the fastest QOI encoders/decoders out there.
- Compliant with the latest QOI format specification.
- Zero unsafe code.
- Supports decoding from / encoding to
std::io
streams directly. no_std
support.- Roundtrip-tested vs the reference C implementation; fuzz-tested.
Examples
use qoi_fast::{encode_to_vec, decode_to_vec};
let encoded = encode_to_vec(&pixels, width, height)?;
let (header, decoded) = decode_to_vec(&encoded)?;
assert_eq!(header.width, width);
assert_eq!(header.height, height);
assert_eq!(decoded, pixels);
Benchmarks
Comparison to the reference C implementation (as of 00e34217), benchmarks timings collected on Apple M1 (1782 images, 1187 MB total):
codec decode:ms encode:ms decode:mp/s encode:mp/s
qoi-c 4389.75 5524.18 283.5 225.3
qoi-fast 3026.68 4304.26 411.2 289.2
no_std
This crate supports no_std
mode. By default, std is enabled via the std
feature. You can deactivate the default-features
to target core instead.
In that case anything related to std::io
, std::error::Error
and heap
allocations is disabled. There is an additional alloc
feature that can
be activated to bring back the support for heap allocations.
License
This project is dual-licensed under MIT and Apache 2.0.