レビュー

PNG画像を最大50倍高速にエンコード可能なライブラリ「QOI」が登場したので使ってみた


既存のライブラリと比べて20~50倍のエンコード速度を実現したPNG形式画像エンコード・デコードライブラリ「QOI」が、ソフトウェアエンジニアのDominic Szablewski氏によって開発されました。QOIのソースコードや性能評価用のコードがSzablewski氏によって公開されていたので、実際にビルドしてQOIの性能を確認してみました。

Lossless Image Compression in O(n) Time
https://phoboslab.org/log/2021/11/qoi-fast-lossless-image-compression

画像の表示機能をアプリケーションに実装するには各画像形式のエンコード・デコードに対応したライブラリが必要であり、PNG画像形式のエンコード・デコードライブラリとしてはPNGのリファレンス実装である「libpng」や、多くの画像形式に対応した「stb」が存在しています。今回開発されたQOIはエンコード・デコードの速度を重視したライブラリで、同じPNG形式画像を無劣化圧縮する場合、既存のライブラリと比べてデコードは3~4倍、エンコードは20~50倍の速さで実行可能とのこと。


QOIやQOIの性能評価用ベンチマークアプリのソースコードは、以下のリンク先でMITライセンスで公開されています。今回はベンチマークアプリを実際にビルドして実行し、QOIの性能を確かめてみます。

GitHub - phoboslab/qoi: The “Quite OK Image” format for fast, lossless image compression
https://github.com/phoboslab/qoi


今回は、ノートPCにインストールしたUbuntuでベンチマークアプリをビルドします。まずはGitをインストールした上で以下のコマンドを実行し、QOIのGitリポジトリをローカルにクローンします。

git clone https://github.com/phoboslab/qoi.git


次に、ソースコードのコンパイルに必要なパッケージがまとめられた「build-essential」と、ベンチマークアプリのビルドに必要な「libpng-dev」と「libstb-dev」を以下のコマンドでインストールします。

sudo apt install build-essential libpng-dev libstb-dev


後は、以下のコマンドを実行して「qoibench.c」をコンパイルすれば、QOIのベンチマークアプリのビルド作業は完了です。

gcc qoibench.c -std=gnu99 -lpng -I /usr/include/stb -O3 -o qoibench


ベンチマークアプリでは、指定した画像をlibpng・stb・QOIで無劣化圧縮して、デコード・エンコードに必要な時間や圧縮後のサイズを比較できます。ベンチマークアプリを実行する際は、以下のコマンドを実行すればOK。<iterations>にはベンチマークの試行回数を入力し、<directory>にはPNG形式の画像ファイルを置いたディレクトリを入力します。

qoibench <iterations> <directory>


今回は、ディレクトリ「images/textures/」にテスト用のPNG形式画像を配置して、以下のコマンドでベンチマークを実行しました。

./qoibench 5 images/textures/


ベンチマークのテスト画像には、以下の「GIGAZINEのトップページのスクリーンショット」を使いました。以下の画像はリサイズ済みの画像であり、ベンチマークに用いた元ファイルの解像度は1903×3334ピクセルで、ファイルサイズは6948KBです。


ベンチマーク結果は以下の通り。デコードにかかった時間はlibpngが69.3ミリ秒で、stb(stbi)が83.7ミリ秒、QOIが28.0ミリ秒。エンコードにかかった時間はlibpngが1106.7ミリ秒で、stb(stbi)が929.7ミリ秒、QOI(qoi)が43.0ミリ秒でした。QOIはlibpngと比べて約2.5倍のデコード速度と約25.7倍のエンコード速度が確認できました。また、圧縮後のファイルサイズはlibpngが5158KBで、stbが6883KB、QOIが5796KBです。


Szablewski氏によると、QOIには連長圧縮辞書式圧縮の中間的なアルゴリズムが採用されているとのこと。その仕組みから、QOIはアニメ調のイラストなどのべた塗り要素が多い画像ほど高い圧縮効果を得られます。Szablewski氏は、QOIの開発を進めることでビデオコーデックへの応用も可能かもしれないと述べており、QOIの開発が進んで多くのソフトウェアで採用されれば、画像表示速度やムービー表示速度が大きく改善する可能性もありそうです。

なお、Szablewski氏によってウェブサイトのスクリーンショットやテクスチャーを対象に行われたQOIのベンチマーク結果は、以下のページで確認できます。

QOI Benchmark Results
https://phoboslab.org/files/qoibench/

この記事のタイトルとURLをコピーする

・関連記事
GoogleがJPEGエンコーダー「Guetzli」をオープンソースで公開 - GIGAZINE

JPEG画像をロスレスで22%も圧縮できるオープンソースソフト「Lepton」をDropboxがリリース - GIGAZINE

3kbpsという低いビットレートでも高音質を実現するコーデック「Lyra」をGoogleが開発 - GIGAZINE

無料で5ミリ秒という超低遅延を実現する非可逆音声圧縮コーデック「Opus」、何がすごいのかまとめ - GIGAZINE

動画エンコードの探求に「終わり」はあるのか? - GIGAZINE

in レビュー,   ソフトウェア, Posted by log1o_hf

You can read the machine translated English article here.