2021-11-24 11:07:17 +01:00
|
|
|
|
# QOI - The “Quite OK Image” format for fast, lossless image compression
|
|
|
|
|
|
|
|
|
|
Single-file MIT licensed library for C/C++
|
|
|
|
|
|
|
|
|
|
See [qoi.h](https://github.com/phoboslab/qoi/blob/master/qoi.h) for
|
|
|
|
|
the documentation.
|
|
|
|
|
|
|
|
|
|
More info at https://phoboslab.org/log/2021/11/qoi-fast-lossless-image-compression
|
|
|
|
|
|
2021-11-30 17:45:48 +01:00
|
|
|
|
⚠️ 2021.11.30 – the file format is not yet finalized. We're still working to fix
|
|
|
|
|
some smaller issues. The final specification will be announced on 2021.12.20.
|
2021-12-11 15:48:01 +01:00
|
|
|
|
Thanks for your patience! The WIP file format specification can be found in
|
|
|
|
|
[qoi.h](https://github.com/phoboslab/qoi/blob/master/qoi.h)
|
2021-11-27 18:36:17 +01:00
|
|
|
|
|
2021-11-27 13:21:16 +01:00
|
|
|
|
|
2021-11-24 11:07:17 +01:00
|
|
|
|
## 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](https://github.com/phoboslab/qoi/blob/master/qoiconv.c)
|
|
|
|
|
converts between png <> qoi
|
|
|
|
|
- [qoibench.c](https://github.com/phoboslab/qoi/blob/master/qoibench.c)
|
|
|
|
|
a simple wrapper to benchmark stbi, libpng and qoi
|
2021-11-28 16:12:08 +01:00
|
|
|
|
|
2021-11-29 11:23:33 +01:00
|
|
|
|
|
2021-12-16 20:12:27 +01:00
|
|
|
|
## 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.
|
|
|
|
|
|
|
|
|
|
|
2021-11-29 11:23:33 +01:00
|
|
|
|
## Tools
|
|
|
|
|
|
|
|
|
|
- https://github.com/floooh/qoiview
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Implementations of QOI
|
|
|
|
|
|
|
|
|
|
- https://github.com/MasterQ32/zig-qoi (Zig)
|
|
|
|
|
- https://github.com/steven-joruk/qoi (Rust)
|
|
|
|
|
- https://github.com/ChevyRay/qoi_rs (Rust)
|
2021-12-01 15:48:53 +01:00
|
|
|
|
- https://github.com/zakarumych/rapid-qoi (Rust)
|
2021-11-29 11:23:33 +01:00
|
|
|
|
- https://github.com/xfmoulet/qoi (Go)
|
|
|
|
|
- https://github.com/panzi/jsqoi (TypeScript)
|
2021-12-11 17:22:41 +01:00
|
|
|
|
- https://github.com/0xd34df00d/hsqoi (Haskell)
|
2021-11-29 11:23:33 +01:00
|
|
|
|
- https://github.com/pfusik/qoi-ci (Ć)
|
2021-12-05 10:18:49 +01:00
|
|
|
|
- https://github.com/kodonnell/qoi (Python)
|
2021-12-05 21:23:24 +01:00
|
|
|
|
- https://github.com/NUlliiON/QoiSharp (C#)
|
2021-12-06 02:46:10 +01:00
|
|
|
|
- https://github.com/rbino/qoix (Elixir)
|
2021-12-08 21:22:16 +01:00
|
|
|
|
- https://github.com/elihwyma/Swift-QOI (Swift)
|
2021-12-13 17:44:24 +01:00
|
|
|
|
- https://github.com/saharNooby/qoi-java (Java)
|
2021-11-29 11:23:33 +01:00
|
|
|
|
|
|
|
|
|
|
2021-11-28 16:12:08 +01:00
|
|
|
|
## Packages
|
|
|
|
|
|
|
|
|
|
[AUR](https://aur.archlinux.org/pkgbase/qoi-git/) - system-wide qoi.h, qoiconv and qoibench install as split packages.
|
|
|
|
|
|