NAS の PNG を速く見る 〜 静止画可逆圧縮まとめ

20MB の PNG ファイルを Atom プロセッサで展開すると 30 秒もかかって話にならんわけですよ。そこで低性能 CPU でも高速に展開できる静止画可逆圧縮方式を求める旅に出たわけですな。

要求仕様

  • ネットワークドライブに置いてある画像ファイルをノートパソコンで閲覧する。
  • ファイルは PNG で 1 枚 10〜20MB 程度。可逆であればフォーマットは問わない。
  • サーバは DELL Dimension 2400 (Celeron 2.4GHz) + Ubuntu 8.04 + Samba 3.0.28a
  • ネットワークは無線 LAN (54Mbps)
  • クライアントは工人舎 PM (ATOM Z510 1.1GHz) + Windows XP SP3 + Leeyes 2.6.1β + Susie プラグイン

評価方法

Leeyes でサムネイルキャッシュを無効にし、14 枚のファイルが入ったフォルダを開き、すべてのサムネイルが表示されるまでの時間を計測する。

方針1: PNG にこだわる

I/O 時間と CPU 時間の両面から攻めてみようか。

ファイルを最適化してみる

元のファイル*1 (original) と、BlastPNG*2 で最適化したファイル (optimized) を用意した。BlastPNG は複数の最適化ツールを一括実行するフロントエンドである。今回は pngrewrite, OptiPNG, PNGOut, cPNGC を使用し、他のパラメータはデフォルトのままとした。14 枚のファイルの合計サイズは original が 115MB、optimized が 105MB である。

展開プラグインを変えてみる

PNG を展開できる Susie プラグインは私が知るかぎり 7 種類ある。*3

作者 ファイル 配布元
A 宮坂賢さん IFPNG.SPI 0.25L http://hp.vector.co.jp/authors/VA010446/
B BAROQUE さん bqpng.spi 0.07 消滅?
C 渡辺裕朗さん ifPNG.spi 0.6.1 http://www.asahi-net.or.jp/~DS8H-WTNB/
D K'z さん ifpng.spi 0.08 http://www.asahi-net.or.jp/~gv9k-setg/
E wai emu さん InPng.spi 0.7.7 http://wai-emu-web.hp.infoseek.co.jp/
F Makito Miyano さん ifgdip.spi 0.8 http://miyano.s53.xrea.com/
G nilpo さん ifwic.spi 100105 http://nilpo.sitemix.jp/susie-plugin

F, G は自前で展開するのではなく Windows の画像処理コンポーネント (F は GDI+、G は WIC) を利用しているものと思われる。今回は A, C, E, F, G の 5 種類を比較した。

結果
original optimized
A 3分15秒 3分15秒
C 2分30秒 2分10秒
E 3分00秒 3分03秒
F 2分38秒 3分23秒
G 4分12秒 2分17秒
考察

A, E で original と optimized の時間差がほとんどないことから、ボトルネックは I/O ではなく CPU であると考えられる。
最適化の有無に対しては、自前展開の A, C, E が鈍感である一方、Windows 丸投げの F, G はかなり敏感であることがわかる。これは特異値ではなく、何度か計っても同じ傾向だった。理由は不明。

方針2: PNG を見捨てる

他のフォーマットも試してみようか。

フォーマット 仕様 エンコーダ デコーダ
H HD Photo 仕様書 Paint.NET プラグイン Susie プラグイン
J, K TLG 解説 コンバータ Susie プラグイン
L ERI 開発元 コンバータ Susie プラグイン
結果
フォーマット 圧縮時間 サイズ 展開プラグイン ノート (ネットワーク) ノート (ローカル) デスクトップ (参考)
C PNG (original) 115MB ifPNG.spi ver 0.6.1 2分30秒 46.8秒 8.6秒
G PNG (optimized) すごく長い 105MB ifwic.spi 100105 2分17秒 37.2秒 6.6秒
H HD Photo (100%) 短い 113MB ifwic.spi 100105 4分35秒 1分28秒 11.5秒
J TLG5 かなり長い 137MB if_tlg.spi 0.03 2分14秒 37.8秒 4.8秒
K TLG6 とても長い 88MB if_tlg.spi 0.03 1分56秒 43.7秒 7.5秒
L ERI 短い 115MB iferigls.spi N/A N/A N/A
M BMP (参考) 398MB 5分09秒 50.6秒 3.0秒
考察

圧縮率は TLG6 が 1 位。ただし圧縮にえらい時間がかかるうえ、コンバータがイケてないのがタマにキズ *4HD Photo と ERI は PNG と大差なし、ただし速い。ちなみに HD Photo は一括コンバータを見つけられなかった*5
ノート (ネットワーク) の総合タイムは、転送時間の短い TLG6 が 1 位。 HD Photo は展開が遅くてダメぽ。ERI は「読み込めません」と言われて読み込めず、しょぼーん。
ノート (ローカル) はローカル micro SD から読み込んだ場合。総合タイムで PNG (optimized) と TLG5 がほぼ 1 位タイ、TLG6 は 3 位に転落した。I/O がボトルネックとならない場面では TLG の優位性は失われると言えそうだ。
デスクトップはローカル HDD でディスクキャッシュに載った状態から読み込んだ場合。環境は Core 2 Duo 3.0GHz + Windows Vista SP2 + Leeyes 2.6.1β + Susie プラグイン。これぐらい速ければストレス感じないんだけどなー。

結論

もうリモートデスクトップでいいや (´Д`;)