GitHub - phoboslab/qoi: The “Quite OK Image Format” for fast, lossless image compression

GitHub

QOI Logo
QOI Logo

Single-file MIT licensed library for C/C++

See

qoi.h

for the documentation and format specification.

More info at

https://qoiformat.org

Why?

QOI offers sweet-spot of compression ratio and throughput for lossless image encoding. QOI's compression is roughly comparable to PNG (usually worse than

libPNG

, but better than

stb_image_write.h

), while throughput is a lot higher.

Benchmark results on a few thousand images can be found here:

https://qoiformat.org/benchmark/

The QOI format is also extremely simple, which helps a lot when porting to other languages.

Example Usage

qoiconv.c

converts between png <> qoi

qoibench.c

a simple wrapper to benchmark stbi, libpng and qoi

MIME Type, File Extension

The recommended MIME type for QOI images is image/qoi. While QOI is not yet officially registered with IANA, I believe QOI has found enough adoption to prevent any future image format from choosing the same name, thus making a MIME type collision highly unlikely (

see #167

).

The recommended file extension for QOI images is .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.

Improvements, New Versions and Contributing

The QOI format has been finalized. It was a conscious decision to not have a version number in the file header. If you have a working QOI implementation today, you can rest assured that it will be compatible with all QOI files tomorrow.

There are a lot of interesting ideas for a successor of QOI, but none of these will be implemented here. That doesn't mean you shouldn't experiment with QOI, but please be aware that pull requests that change the format will not be accepted.

Likewise, pull requests for performance improvements will probably not be accepted either, as this "reference implementation" tries to be as easy to read as possible.

Tools

floooh/qoiview

- native QOI viewer

pfusik/qoi-fu

- QOI Plugin installer for Windows Explorer, Finder, GNOME, GIMP 2, Paint.NET and XnView

iOrange/QoiFileTypeNet

- QOI Plugin for Paint.NET

iOrange/QOIThumbnailProvider

- Add thumbnails for QOI images in Windows Explorer

Tom94/tev

- another native QOI viewer (allows pixel peeping and comparison with other image formats)

wkjarosz/hdrview

- research-oriented HDR/LDR image viewer with QOI read/write support; runs natively or in-browser

qoiconverterx

QOI <=> PNG converter available on the Mac App Store

kaetemi/qoi-ma

- QOI Bitmap I/O Plugin for 3ds Max

rtexviewer

- texture viewer, supports QOI

rtexpacker

- texture packer, supports QOI

DmitriySalnikov/godot_qoi

- QOI GDNative Addon for Godot Engine

dan9er/farbfeld-convert-qoi

- QOI <=> farbfeld converter

LTMX/Unity.QOI

- QOI Importer and Exporter for the Unity3D Game Engine

Ben1138/unity-qoi

- QOI Importer(only) support for the Unity3D Game Engine

xiaozhuai/jetbrains-qo

-

QOI Support

for Jetbrains' IDE.

serge-ivamov/QOIql

- MacOS QuickLook plugin for QOI

tobozo/kde-thumbnailer-qoi

- QOI Thumbnailer for KDE

walksanatora/qoi-thumbnailer-nemo

- QOI Thumbnailer for Nemo

hzeller/timg

- a terminal image viewer with QOI support

LuisAlfredo92/Super-QOI-converter

- A program to convert JPG, JPEG, BMP, and PNG to QOI

Console version

: Available for Linux, OSX and Windows

GUI version

: Available only for windows

tacent view

- Image and texture viewer, supports QOI

colemanrgb/qoi2spr

- A variety of applications for decoding and encoding of QOI images on

RISC OS

Muppetsg2/UnrealQOI

- QOI Format Import/Export plugin for Unreal Engine 5

microsoft/PowerToys

- Adds QOI file preview and thumbnails support to Windows Explorer

Mupceet/qoi-viewer

- QOI Viewer for Visual Studio Code

Implementations & Bindings of QOI

pfusik/qoi-fu

- Fusion, transpiling to C, C++, C#, D, Java, JavaScript, Python, Swift and TypeScript

kodonnell/qoi

- Python

JaffaKetchup/dqoi

- Dart, with Flutter support

Cr4xy/lua-qoi

- Lua

superzazu/SDL_QOI

- C, SDL2 bindings

saharNooby/qoi-java

- Java

MasterQ32/zig-qoi

- Zig

rbino/qoix

- Elixir

NUlliiON/QoiSharp

- C#

aldanor/qoi-rust

- Rust

zakarumych/rapid-qoi

- Rust

takeyourhatoff/qoi

- Go

DosWorld/pasqoi

- Pascal

elihwyma/Swift-QOI

- Swift

xfmoulet/qoi

- Go

erratique.ch/qoic

- OCaml

arian/go-qoi

- Go

kchapelier/qoijs

- JavaScript

KristofferC/QOI.jl

- Julia

shadowMitia/libqoi

- C++

MKCG/php-qoi

- PHP

LightHouseSoftware/qoiformats

- D

mhoward540/qoi-nim

- Nim

wx257osn2/qoixx

- C++

Tiefseetauchner/lr-paint

- Processing

amstan/qoi-fpga

- FPGA: verilog

musabkilic/qoi-decoder

- Python

mathpn/py-qoi

- Python

Joshix/qoi-rs-python

- Python

JohannesFriedrich/qoi4R

- R

shraiwi/mini-qoi

- C, streaming decoder

10maurycy10/libqoi/

- Rust

0xd34df00d/hsqoi

- Haskell

418Coffee/qoi-v

- V

Imagine-Programming/QoiImagePlugin

- PureBasic

Fabien-Chouteau/qoi-spark

- Ada/SPARK formally proven

mzgreen/qoi-kotlin

- Kotlin Multiplatform

Aftersol/Simplified-QOI-Codec

- C99, encoder and decoder, freestanding

AuburnSounds/gamut

- D

AngusJohnson/TQoiImage

- Delphi

MarkJeronimus/qoi-java-spi

- Java SPI

aumouvantsillage/qoi-racket

- Racket

rubikscraft/qoi-stream

- C99, one byte at a time streaming encoder and decoder

rubikscraft/qoi-img

- NodeJS typescript, bindings to both

QOIxx

and

qoi-stream

grego/hare-qoi

- Hare

MrNocole/ZTQOI

- Objective-C

bpanthi977/qoi

- Common Lisp

Floessie/pam2qoi

- C++

SpeckyYT/spwn-qoi

- SPWN

n00bmind/qoi

- Jai

SixLabors/ImageSharp

- C# image proccesing library

zertovitch/gid

- Ada

nazrin/lil

- Lua image library

Hema2-official/qoi-c3

- C3

kwon-young/qoi-prolog

- Prolog

google/wuffs

- Wuffs

dokutan/qoi-bf

- Brainfuck

alex-s168/uiua-qoi

- Uiua

hchargois/qoi

- Go

coralpink/qoi.cr

- Crystal

Pivok7/zqoi

- Zig

Muppetsg2/koi

- stb-like single-file, public domain (or MIT-licensed) image processing libraries for C/C++

QOI Support in Other Software

Amiga OS QOI datatype

- adds support for decoding QOI images to the Amiga operating system.

SerenityOS

- supports decoding QOI system wide through a custom

cpp implementation in LibGfx

Raylib

- supports decoding and encoding QOI textures through its

rtextures module

Rebol3

- supports decoding and encoding QOI using a native codec

c-ray

- supports QOI natively

SAIL

- image decoding library, supports decoding and encoding QOI images

Orx

- 2D game engine, supports QOI natively

IrfanView

- supports decoding and encoding QOI through its Formats plugin

ImageMagick

- supports decoding and encoding QOI, since 7.1.0-20

barebox

- bootloader, supports decoding QOI images for splash logo, since v2022.03.0

KorGE

- & KorIM Kotlin 2D game engine and imaging library, supports decoding and encoding QOI natively since 2.7.0

DOjS

- DOS JavaScript Canvas implementation supports loading QOI files

XnView MP

- supports decoding QOI since 1.00

ffmpeg

- supports decoding and encoding QOI since 5.1

JPEGView

- lightweight Windows image viewer, supports decoding and encoding of QOI natively, since 1.1.44

darktable

- photography workflow application and raw developer, supports decoding since 4.4.0

KDE

- supports decoding and encoding QOI images. Implemented in

KImageFormats

EFL

- supports decoding and encoding QOI images since 1.27.

Swingland

- supports QOI decoding/loading via the ImageIO API of this Java Swing reimplemenation for Wayland

Imagine

- supports decoding and encoding QOI images since 1.3.9

Uiua

- supports decoding and encoding QOI images since 0.8.0

Google Earth Pro

- supports Movie Maker export as sequence of QOI images since 7.3.6

GIMP

- supports decoding and encoding QOI images since 3.0

ObjFW

- supports decoding and encoding QOI images since 1.5

Minimal Image Viewer

- Fast & Lightweight image viewer for Windows

Packages

AUR

- system-wide qoi.h, qoiconv and qoibench install as split packages.

Debian

- packages for binaries and qoi.h

Ubuntu

- packages for binaries and qoi.h

Fedora

- packages for binaries and qoi.h

Packages for other systems

tracked at Repology

.