フルカラーGIF生成スクリプト開発顛末記。

しらぎくさいと実験室で実験していたGIF画像形式を用いたフルカラー画像生成スクリプトに関する顛末です。

そもそもGIF画像形式でフルカラーは可能なのか?

GIF画像形式は最大256色のインデックスドカラーのみを取扱う規格として知られております。

ですから、GIF画像形式では257色以上の画像を取扱う事は不可能だと思われております。

しかしながら、GIF画像形式では複数の画像フレームを収納する事が出来(これによりアニメーションGIF画像も可能になります)、しかもここの画像データに対して個別パレットを設定する事も出来ます、

つまり、実際に画像に用いられている色を収集し、それを最大255色のパレットに分割して個々のフレームに個別パレットとして割り当て、それらを重ね合わせて表示させる事で257色以上の画像を実現させる事は可能になります。

実際に作成したフルカラーGIF画像のサンプル。

画像連結出力スクリプトフルカラー対応版でのサンプルをフルカラーGIF画像形式で作成させるPerlスクリプトの実行結果です。

この箇所で実際にサンプル画像を表示させております。

ファイルの容量はフルカラー対応版と較べると以下のような違いが見られました。

画像生成処理の所要時間と生成ファイル容量の一覧
出力させる画像形式 処理に掛かった所要時間 出力させたファイルの容量
GIF画像形式 216色に減色した場合 0.30秒前後 3.5キロバイト前後
アニメーションの原理でフルカラーにした場合 0.40秒前後 8〜10キロバイト
JPEG画像形式 高圧縮率(超低画質) 0.45秒前後 2.5キロバイト前後
PNG画像形式 圧縮にZlibを用いた場合 0.26秒前後 5.5キロバイト前後
圧縮にPerlによる圧縮ルーティンを用いた場合 0.40秒前後 10キロバイト前後

このように、結果としては、それ程悪い結果には見えませんでした。

フルカラーGIF画像生成スクリプトの発表を思い留まった理由。

しかしながら、その後実験を続けていくうちに、フルカラーGIF画像形式を実現するスクリプトの公開は難しいと判断し、発表を断念する事としました。

その理由は以下の通りです。

フルカラー画像では、使用する色数が多過ぎる事がある

200ピクセルズ四方の画像でも二万色近く使われている場合もあります。

特にJPEG画像形式で効率よく圧縮されているような画像は、得てして色数が多く、GIF画像形式などでの圧縮には向かないものです。

色数が増えると、圧縮効率がマイナスになる事もある

GIF画像形式に採用されているLZW圧縮アルゴリズムや、PNG画像形式に採用されているデフレート圧縮アルゴリズムは同じデータが連続するような場合に効力を発揮します。

しかしながら、色数が多過ぎると、これらの圧縮アルゴリズムでの対応が著しく困難になります。

余りにも色数が多いと、圧縮出来るどころか却ってデータを肥大化させる事にもなり兼ねません。

色数が増えると、処理が膨大になる

サンプルではせいぜい一千色程度なので大した問題にはなりませんでした。

しかしながら、例えば二万色だと79枚のフレームが必要になります。

つまり、二万色の画像を生成する場合、一度に79枚のGIF画像を生成する操作を行わなければならなくなる訳です。

サーヴァへの負荷は相当なものとなるのは火を見るより明らかでしょう。

フルカラーGIF画像に関する今後の対応。

一度は実現しようとしたフルカラーGIF画像でしたが、このような状況なので正式な公開は断念しました。

しかしながら、このスクリプトを実験していく過程で、フルカラー画像の扱いについて幾つか分かった点があったので、これらをフルカラー画像の減色処理に活用出来たらと思っております。


ページ外へのご案内。