QOI (Quite OK Image Format): 高速でシンプルな可逆画像圧縮フォーマット
QOIは、Dominic Szablewski氏によって開発された、24
ビットまたは32
ビットカラーのラスター画像を
可逆圧縮するための新しい画像フォーマットです。2021年11月に公開され、その高速な処理速度とシンプルな実装で注目を集めています。
開発の目的と特徴
QOIの開発目標は、PNGよりも実装が容易で、高速に処理できるオープンソースの
可逆圧縮方式を提供することでした。そして、その目標は達成されています。多くのベンチマークテストで、PNGと比較してエンコード速度は20~50倍、デコード速度は3~4倍の高速性を示しています。
QOIは
パブリックドメイン(CC0)ライセンスで公開されているため、自由に使用・改変・再配布が可能です。このオープンソースの性質と高いパフォーマンスが、QOIの普及を後押ししています。
QOIはすでに多くの画像処理ソフトウェアや
プログラミング言語でサポートされています。
ネイティブサポート: ImageMagick、
IrfanView (4.60以降)、
FFmpeg (5.1以降)、GraphicConverter (11.8以降)など
コミュニティプラグイン: GIMP、Paint.NET、
XnViewなど
プログラミング言語実装: Rust、
Python、
Java、
C++、C#など
これらの幅広いサポートにより、QOIは様々な環境で容易に利用できるようになっています。
ファイルフォーマット
QOIファイルは、以下の構造で構成されています。
1.
ヘッダー (14バイト): ファイルの種類や画像のサイズなどのメタデータを含みます。
2.
データチャンク: 画像データを符号化して格納します。
3.
終端マーカー (8バイト): ファイルの終わりを示します。
ヘッダーの色空間やチャンネル情報は、符号化方法には影響しません。
符号化方法
QOIは、効率的な
可逆圧縮を実現するために、複数の符号化手法を組み合わせています。画像の符号化は、行順で左から右、上から下に処理されます。エンコーダは、直前の
ピクセルの値を記憶し、その情報に基づいて次の
ピクセルを圧縮します。主な符号化手法は以下の通りです。
QOI_OP_RUN: 直前の
ピクセル値の繰り返しをランレングス圧縮します。
QOI_OP_INDEX: 直前に出現した
ピクセルのインデックスを指定することで圧縮します。64個の
ピクセルをキャッシュして、同じ
ピクセルが出現した際にインデックスを使用します。
QOI_OP_DIFF: 直前の
ピクセルとの
RGB値の差分を符号化します。
QOI_OP_LUMA: 緑チャンネルを基準として、赤と青のチャンネルの差分を符号化します。
QOI_OP_RGB/QOI_OP_RGBA: RGB/
RGBA値を直接符号化します。
これらの手法を組み合わせることで、画像データの冗長性を効果的に削減し、高圧縮率を実現しています。
各チャンクは2
ビットまたは8
ビットのタグで始まり、それにデータ
ビットが続きます。データ
ビットは全て左端に最上位
ビットが配置されています。ファイルの終端は特定のバイトパターンでマークされます。
まとめ
QOIは、高速な処理速度、シンプルな実装、そしてオープンソースという利点を兼ね備えた、魅力的な画像フォーマットです。その高いパフォーマンスと将来性から、今後ますます多くの場面で利用されることが期待されます。