Crate qoi

Source
Expand description

Fast encoder/decoder for QOI image format, implemented in pure and safe Rust.

  • 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::{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

             decode:Mp/s  encode:Mp/s  decode:MB/s  encode:MB/s
qoi.h              282.9        225.3        978.3        778.9
qoi-rust           427.4        290.0       1477.7       1002.9
  • Reference C implementation: phoboslab/qoi@00e34217.
  • Benchmark timings were collected on an Apple M1 laptop.
  • 2846 images from the suite provided upstream (tarball): all pngs except two with broken checksums.
  • 1.32 GPixels in total with 4.46 GB of raw pixel data.

Benchmarks have also been run for all of the other Rust implementations of QOI for comparison purposes and, at the time of writing this document, this library proved to be the fastest one by a noticeable margin.

§Rust version

The minimum supported Rust version is 1.51.0 (any changes to this would be considered to be a breaking change).

§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.

Structs§

Decoder
Decode QOI images from slices or from streams.
Encoder
Encode QOI images into buffers or into streams.
Header
Image header: dimensions, channels, color space.

Enums§

Channels
Number of 8-bit channels in a pixel.
ColorSpace
Image color space.
Error
Errors that can occur during encoding or decoding.

Functions§

decode_header
Decode the image header from a slice of bytes.
decode_to_buf
Decode the image into a pre-allocated buffer.
decode_to_vec
Decode the image into a newly allocated vector.
encode_max_len
The maximum number of bytes the encoded image will take.
encode_to_buf
Encode the image into a pre-allocated buffer.
encode_to_vec
Encode the image into a newly allocated vector.

Type Aliases§

Result
Alias for Result with the error type of Error.