• Stars
    star
    6,657
  • Rank 5,647 (Top 0.2 %)
  • Language
    C
  • License
    MIT License
  • Created over 2 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The “Quite OK Image Format” for fast, lossless image compression

QOI Logo

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

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

Implementations & Bindings of QOI

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

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

Packages for other systems tracked at Repology.

More Repositories

1

jsmpeg

MPEG1 Video Decoder in JavaScript
JavaScript
6,222
star
2

Ejecta

A Fast, Open Source JavaScript, Canvas & Audio Implementation for iOS
Objective-C
2,795
star
3

wipeout-rewrite

C
2,449
star
4

jsmpeg-vnc

A low latency, high framerate screen sharing server for Windows and client for browsers
C
2,329
star
5

Impact

HTML5 Game Engine
JavaScript
1,916
star
6

q1k3

A tiny FPS for js13k
JavaScript
1,471
star
7

underrun

Twin stick shooter game in 13kb of JavaScript/WebGL
JavaScript
1,075
star
8

pl_mpeg

Single file C library for decoding MPEG1 Video and MP2 Audio
C
695
star
9

JavaScriptCore-iOS

Apple's JavaScript Engine, with modified project files for iOS
C++
685
star
10

qoa

The “Quite OK Audio Format” for fast, lossy audio compression
C
641
star
11

wipeout

WipEout (PSX) Model Viewer in WebGL/Three.js
JavaScript
520
star
12

voidcall

Real time strategy game in 13kb of JavaScript/WebGL
JavaScript
365
star
13

WebGLImageFilter

Fast image filters for Browsers with WebGL support
JavaScript
322
star
14

js-hqx

hqx Pixel Art Scaling Algorithm in JavaScript
JavaScript
187
star
15

TwoPointFive

3D View Plugin for the Impact HTML5 Game Engine
JavaScript
140
star
16

Quakespasm-Rift

Quake for Oculus Rift
C
138
star
17

Asaph

A micro-blogging system, focusing on collecting links and images
PHP
97
star
18

ttt

Tiny Texture Tumbler – A JS library and an editor to create textures
HTML
78
star
19

pagenode

Pagenode – No Bullshit Content Management
PHP
68
star
20

OculusWeb

A fast and lean HTTP/WebSocket Oculus Rift Tracking Server for Windows and Mac
C
57
star
21

impact-box2d

Box2D Plugin for the Impact Game Engine
JavaScript
51
star
22

JS360

A NET framework for JavaScript on the XBox with XNA.
C#
48
star
23

json-format

JSON Pretty Printer for JavaScript
JavaScript
38
star
24

picturelicious

Social Imaging Platform
PHP
36
star
25

impact-splash-loader

A loading screen for Impact that shows the Impact logo
JavaScript
34
star
26

rectpack

Super Simple Rectangle Packing for JS
JavaScript
13
star
27

arduboy-games

My Arduboy Mini Games
C
12
star
28

jQuery-JSH

Tiny jQuery Plugin for JavaScript SyntaxHighlighting
11
star
29

pagenode-legacy

Older version of Pagenode with a complete admin interface
PHP
2
star