Optimized PNGEncoder with filters

PNG フォーマットには圧縮効率を上げるフィルタという仕組みがあるので、そいつを Optimized PNGEncoder に実装してみた。

PNG フォーマットで定義されてるフィルタの種類は5種類。

  • None – 該当バイトをそのまま使用 (as3corelib の PNGEncoder はこれ一択)
  • Sub – 該当バイトと左のピクセルのバイトとの差分を使用
  • Up – 該当バイトと上のピクセルのバイトとの差分を使用
  • Average – 該当バイトと左/上のピクセルのバイトの平均値との差分を使用
  • Paeth – 該当バイトと左/上/左上のピクセルのバイトのうちの最近傍値との差分を使用

ていう感じ。どのフィルタを使うのが圧縮率が高いかは対象の画像に依存する。

Optimized PNGEncoder with filters – wonderfl build flash online

ファイルサイズは 1 / 5 くらいになるけど、処理時間は倍以上かかっちゃう。このまま None 以外のフィルタ使うとサーバ資源は節約できるけどユーザのストレスは倍増間違いなし・・・ あ、Alchemy の出番ですね!!まだ Cygwin のセットアップも終わってないけど!!

// 関係ないけど Wonderfl でコードが 1000 行越えるとソースコードのプレビューのインデントとかカラーリングとかが壊れちゃいました。


About this entry