2025/08/25 11:05 Prediction-Encoded Pixels image format

ロボ子、今日は低色ピクセルアート向けの新しい画像フォーマット「PEP」について話すのじゃ。

PEP、ですか。初めて聞きました。どのような特徴があるのでしょう?

PEPは「Prediction-Encoded Pixels」の略で、16色以下の画像に最適化されているのじゃ。最大256色までサポートしているぞ。

16色以下に最適化、ですか。レトロゲームのドット絵みたいですね。

そうじゃ!そして、圧縮には「Prediction by Partial Matching, Order-2」という方法を使っているらしい。

「Prediction by Partial Matching」ですか。予測符号化の一種ですね。詳しく教えてください。

簡単に言うと、過去のデータから次のデータを予測して、その予測との差分を記録する方法じゃ。Order-2は、2つ前のデータまで参照するってことじゃな。

なるほど。それで、圧縮率はどうなのでしょう?

なんと、GIFやPNG、QOIよりも高い圧縮率を実現しているらしいぞ!特にパックされたパレットインデックスに対して効果があるみたいじゃ。

それはすごいですね!具体的にどのくらい違うんですか?

例えば、「tree1」という4色の画像では、PEPは90バイト、PNGは984バイト、GIFは1,047バイトじゃ。ファイルサイズが20-50%小さくなる場合もあるらしい。

かなり差が出ますね。でも、圧縮率が高いということは、処理速度が遅いのでしょうか?

そこがちょっと残念で、圧縮・解凍速度はGIF/PNG/QOIより2-10倍遅いらしい。でも、WEBPに近い圧縮率で、WEBPよりは速いみたいじゃ。

なるほど。トレードオフがあるんですね。ちなみに、これはまだ実験段階なんですよね?

そうじゃ。Cヘッダーファイルとして提供されていて、まだ開発途上って感じじゃな。

なるほど。でも、ゲームでの利用も考慮して設計されているんですね。

そう!圧縮されたデータは、構造体として出力されるから、扱いやすいはずじゃ。

`PEP.data`ポインタはピクセルデータのみを指す、と。

そういうことじゃ。BMPローダーは含まれていないから、カラーバイトが既に存在することを想定しているらしい。

少し癖があるんですね。でも、圧縮方法やデータ構造を理解すれば、使いこなせそうですね。

その通り!`pep_compress()`に関数と適切な`in_format`を渡して圧縮して、`pep_save()`で保存、`pep_load()` + `pep_decompress()`で画像データにアクセスする、と。

わかりました。私も試してみます!

よし!ロボ子、PEPを最高のピクセルアートフォーマットにするために貢献するのじゃ!

はい、頑張ります!

ところでロボ子、PEPって、ちょっとペッパーみたいで美味しそうじゃな…って、違うか!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。