MCPcopy Index your code
hub / github.com/aldanor/qoi-rust

github.com/aldanor/qoi-rust @v0.4.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.4.1 ↗ · + Follow
162 symbols 312 edges 20 files 6 documented · 4%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

qoi

Build Latest Version Documentation Apache 2.0 MIT unsafe forbidden

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 required Rust version for the latest crate version is 1.61.0.

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.

Extension points exported contracts — how you extend this code

Writer (Interface)
(no doc) [2 implementers]
src/utils.rs
Reader (Interface)
(no doc) [2 implementers]
src/decode.rs
SupportedChannels (Interface)
(no doc) [2 implementers]
src/pixel.rs
Codec (Interface)
(no doc) [2 implementers]
bench/src/main.rs

Core symbols most depended-on inside this repo

unlikely
called by 12
src/utils.rs
cold
called by 6
src/utils.rs
write_one
called by 5
src/utils.rs
write_many
called by 5
src/utils.rs
decode_to_vec
called by 5
src/decode.rs
r
called by 5
src/pixel.rs
g
called by 5
src/pixel.rs
b
called by 5
src/pixel.rs

Shape

Method 83
Function 54
Class 18
Interface 4
Enum 3

Languages

Rust100%

Modules by API surface

bench/src/main.rs29 symbols
src/decode.rs25 symbols
tests/test_chunks.rs19 symbols
src/pixel.rs19 symbols
src/encode.rs14 symbols
tests/test_gen.rs12 symbols
src/utils.rs10 symbols
src/types.rs10 symbols
src/header.rs10 symbols
tests/test_ref.rs5 symbols
src/error.rs3 symbols
libqoi/src/lib.rs3 symbols

For agents

$ claude mcp add qoi-rust \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact