GIMPで保存する際のPNG圧縮率とファイルサイズの関係
執筆日時:2011/05/20
画像形式のPNGフォーマットは可逆圧縮を行いファイルサイズを削減しますが、その圧縮度合いはアプリケーションにより様々であり、また書き出すときに設定できる場合もあります。一般に圧縮レベルを上げるほどファイルサイズは小さくなりますが、圧縮にかかる時間も増大するので、書き出す画像のサイズや特性を考慮して圧縮の度合いを決める必要があります。今回はLinux上でもっともよく用いられるフォトレタッチソフトであるGIMP(The GNU Image Manipulation Program)で書き出す際のPNG圧縮率を変えて保存し、ファイルサイズがどうなるか調べます。また、PNG最適化専用のコマンドラインツールであるpngcrushも使用して圧縮した場合のファイルサイズとも比較します。なお、GIMPはversion 2.6.8を用い、PNGを書き出す際には「解像度を保存」と「作成日時を保存」にチェックを入れて書き出し。pngcrushは1.7.0を使用して-brute -reduceオプションを加え圧縮します。
1. ロゴ的な画像
画像サイズは1000*120px、色数3408でこのサイトのヘッダーに使用している画像です。透過している部分の割合が多いのと、色もシンプルなグラデーションやぼかしで構成されているので、pngの圧縮がかかりやすいイメージと思われます。WEBサイトで使われる画像としては一般的な具合でしょう。
結果は右図のようになりました。細かい数値は以下の表で観てください。なお、"%"の欄は圧縮レベル1で保存した際のファイルサイズを100としています。
level | byte | % |
---|---|---|
0 | 480962 | 646.85 |
1 | 74354 | 100.00 |
2 | 71056 | 95.56 |
3 | 67400 | 90.65 |
4 | 66316 | 89.19 |
5 | 63446 | 85.33 |
6 | 62076 | 83.49 |
7 | 61478 | 82.68 |
8 | 60700 | 81.64 |
9 | 59876 | 80.53 |
pngcrush | 58621 | 78.84 |
この結果をみると、確かに圧縮レベルを上げればファイルサイズが減少するということが確認できます。
2. 写真素材を使った画像
画像のサイズは1280*720pxで色数が131383。背景に写真をレタッチしたものを用いているということと、イラストの部分も複雑なフィルタを用いて描画しているという理由で複雑な画像です。どちらかというと、PNGに適した画像ではありません(ファイルサイズが小さくなりにくく、JPGでも画像劣化を認識しにくいという意味です)が、これもPNGで圧縮してみます。なお、この画像はArt Creatureで公開している画像です。
level | byte | % |
---|---|---|
0 | 3993196 | 230.80 |
1 | 1730149 | 100.00 |
2 | 1694678 | 97.95 |
3 | 1658813 | 95.88 |
4 | 1502520 | 86.84 |
5 | 1495103 | 86.41 |
6 | 1484594 | 85.81 |
7 | 1477787 | 85.41 |
8 | 1463830 | 84.61 |
9 | 1459640 | 84.36 |
pngcrush | 1412595 | 81.65 |
この画像でも傾向は変わりませんが、前の結果に比べると、圧縮レベルを上げることによるファイルサイズの減少度合いが多少低くなっています。
3. イラスト
画像サイズは1280*720pxで色数は20750。複雑なテクスチャなども用いていないのでPNG向きの画像と言えます。Mizukama Graphicsの方に掲載している画像です。
level | byte | % |
---|---|---|
0 | 3693196 | 617.25 |
1 | 598334 | 100.00 |
2 | 563197 | 94.13 |
3 | 526254 | 87.95 |
4 | 497010 | 83.07 |
5 | 475917 | 79.54 |
6 | 454049 | 75.89 |
7 | 441962 | 73.87 |
8 | 427110 | 71.38 |
9 | 419811 | 70.16 |
pngcrush | 405411 | 67.76 |
こちらは圧縮レベル1のときのファイルサイズに対する圧縮レベル9、もしくはpngcrushを使ったときの減少率が3つの画像中一番低くなりました。1.のロゴ画像に比べてファイルサイズの減少率が下がったのは主に画像のサイズが大きいためと思われますが、2.とは画像サイズ自体は同じなので、どんな描画が行われている画像かによってファイルサイズの減少率に影響が出ることが分かります。
まとめ
まず言えることは、圧縮レベル0で書き出すというのはありえない、ということです。圧縮レベル1で圧縮に要する時間は常識的な画像サイズなら大したこと無いので、どんなに非力なCPUを使っていようとも圧縮レベルは1以上にするべきです。しかしそれ以降は圧縮レベルを上げても劇的にファイルサイズが減少するということはありません。今回検証に用いた画像では圧縮レベル9の時でレベル1のときに比べて70.16~84.36%のファイルサイズになりましたが、圧縮レベルを上げると十分に体感できる程度に圧縮に要する時間が増大するので、非力なCPUでHDDだけ最新のものに入れ替えている場合等は、圧縮レベルを下げて保存するという選択肢も作業の効率化には必要でしょう。