.gitignore | ||
qoi.h | ||
qoibench.c | ||
qoiconv.c | ||
qoifuzz.c | ||
README.md |
QOI - The “Quite OK Image Format” for fast, lossless image compression
Single-file MIT licensed library for C/C++
See qoi.h for the documentation and format specification.
More info at https://qoiformat.org
Why?
Compared to stb_image and stb_image_write QOI offers 20x-50x faster encoding, 3x-4x faster decoding and 20% better compression. It's also stupidly simple and fits in about 300 lines of C.
Example Usage
- qoiconv.c converts between png <> qoi
- qoibench.c a simple wrapper to benchmark stbi, libpng and qoi
Limitations
The QOI file format allows for huge images with up to 18 exa-pixels. A streaming en-/decoder can handle these with minimal RAM requirements, assuming there is enough storage space.
This particular implementation of QOI however is limited to images with a maximum size of 400 million pixels. It will safely refuse to en-/decode anything larger than that. This is not a streaming en-/decoder. It loads the whole image file into RAM before doing any work and is not extensively optimized for performance (but it's still very fast).
If this is a limitation for your use case, please look into any of the other implementations listed below.
Tools
Implementations of QOI
- https://github.com/MasterQ32/zig-qoi (Zig)
- https://github.com/steven-joruk/qoi (Rust)
- https://github.com/ChevyRay/qoi_rs (Rust)
- https://github.com/zakarumych/rapid-qoi (Rust)
- https://github.com/xfmoulet/qoi (Go)
- https://github.com/panzi/jsqoi (TypeScript)
- https://github.com/0xd34df00d/hsqoi (Haskell)
- https://github.com/pfusik/qoi-ci (Ć)
- https://github.com/kodonnell/qoi (Python)
- https://github.com/NUlliiON/QoiSharp (C#)
- https://github.com/rbino/qoix (Elixir)
- https://github.com/elihwyma/Swift-QOI (Swift)
- https://github.com/saharNooby/qoi-java (Java)
- https://github.com/Cr4xy/lua-qoi (Lua)
Packages
AUR - system-wide qoi.h, qoiconv and qoibench install as split packages.