qoi/README.md
2022-01-04 01:52:42 +03:00

2.3 KiB

qoi-fast

Build Latest Version Documentation Apache 2.0 MIT unsafe forbidden

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.