« アップサンプリング、ダウンサンプリング | メイン | JPEG の中にアルファチャンネルデータを詰め込む »

2008年05月03日

吉里吉里 ムービー拡張日誌2:: アルファチャンネルの圧縮方法

    

アルファ付き動画の想定している用途は、立ち絵とエフェクトの2つ。
立ち絵は、立ち絵に限定せず、背景の上にのっかている抜き情報を持った画像全般と考えているが、とりあえずここでは立ち絵と書いておく。

簡単に確認できる方法でアルファチャンネルのみをいくつかの方法で圧縮してみた。
確認方法は、立ち絵のアルファチャンネルを抜き出し、グレースケール画像にして Portable Bit Map 形式で保存し、そのファイルを圧縮すると言うもの ( BMP にするとパレットになるので単純なグレースケール画像とはならない )。
JPEG および PNG、BMP(RLE)、GIF については、グレースケール画像をそのまま変換した。
JPEG は PhotoShop で 画質 8 にして保存している。
1/4 JPEGは、画像のサイズを 1/4 にして JPEG 保存したもの。

元の Portable Bit Map ファイルのサイズ 689 x 630 ( 434,085 Byte ) 。
ZIP圧縮 17,505 Byte ( 4% )
GIF 19,619 Byte ( 4.5% )
PNG 24,542 Byte ( 5.6% )
1/4 JPEG 26,001 Byte ( 6% )
BMP(RLE) 28,128 Byte ( 6.5% )
JPEG 35,073 Byte ( 8% )
LZSS圧縮 64,952 Byte ( 15% )

立ち絵 の場合、エッジ付近に中間階調があるのみで、他は 0 か 255 なのでスライド辞書やランレングスだけでも圧縮率が高い。
Flash のアルファ付き JPEG は、JPEG データ + アルファの ZLib 圧縮のようなので、立ち絵のような画像の場合最も圧縮率が高くなる組み合わせが使われていることになる。
まあ、当然か。
ちなみに色のほうを 画質 8 で JPEG 圧縮したものとアルファを ZIP 圧縮したもののサイズを合計すると 84,287 Byte となった。
これの PNG ファイルは 263,998 Byte なので、サイズは PNG の 32% 程度になる。
画質 8 の JPEG だと見た目はたいして変わらないので、サイズが 1/3 になるのはなかなか魅力的。


一方、アルファの中間階調が多く使われているエフェクト画像も同様に圧縮してみた。

元の Portable Bit Map ファイルのサイズ 421 x 410 ( 172,625 Byte ) 。
1/4 JPEG 17,019 Byte ( 9.9% )
JPEG 23,409 Byte ( 14.6% )
PNG 58,735 Byte ( 34% )
ZIP圧縮 67,079 Byte ( 38.9% )
GIF 77,631 Byte ( 45% )
LZSS圧縮 82,748 Byte ( 47.9% )
BMP(RLE) 94,136 Byte ( 54.5% )

やはり、中間階調が多い場合は、JPEG が強い。
これの色+アルファの PNG ファイルサイズは 162,768 Byte で、JPEG + アルファ 1/4 JPEG の合計は 40,428 Byte 。
つまり、25%。
1/4 ぐらいのサイズになる。
アルファが 1/4 サイズになっているけど、エフェクト用の画像ならそうわからないのではないか思う。

以上の結果からするとアルファは ZLib で圧縮するか JPEG で圧縮するかのどちらかを選択するのが良さそう。
立ち絵のような画像かエフェクトのような画像かで ZLib or JPEG を指定してやるか、自動的に圧縮率の高いものを選択するようにするのが良いかな。
自動の場合、JPEG + JPEG になるとエッジ付近がぼけると思うので、見た目が悪くなるかもしれない。
後、Zip の展開速度次第では別の方法を検討した方がいいかもしれない。
その時は、ランレングスでもかなり圧縮できているので、ランレングスでもいいかな。


関連記事・続きの記事

アルファチャンネル付きJPEG
JPEG の中にアルファチャンネルデータを詰め込む で書いた形で、アルファチャン... [続きを読む]


投稿者 Takenori : 2008年05月03日 21:19




comments powered by Disqus
Total : Today : Yesterday : なかのひと