TinyPNGは無劣化じゃないよ!!というお話。

サイトにも思いっきり“lossy compression(不可逆圧縮)”と書いてあるんですが、TinyPNGは無劣化じゃありません。色の変化が少ないように8bitカラーに落として容量を軽くしています。一部で無劣化っぽく出回っていたので、不幸な人が増えないことを祈ってポストします。

PhotoshopではなくPixelmatorを使ったもので申し訳ないですが、以下の手順で検証用の画像を作成しました。

  1. 32bitと8bitのサンプル画像をダウンロードする。
  2. 各画像の彩度を0(グレースケール)にする。
  3. レイヤーを複製し、上のレイヤーのブレンドモードを「差の絶対値」に設定する。
  4. 32bit画像と32bit画像を重ねたもの、32bit画像と8bit画像を重ねたものを準備する。
  5. 画像を統合する。(Pixelmatorには補正レイヤーがないため)
  6. レベル補正で白の出力を下げる。(白の出力が4%までしか下がらないため、2回レベル補正を実行しています)

TinyPNG検証画像

差の絶対値をザックリ説明すると、上下レイヤーの同一座標のピクセルに、色の差がなければRGB(0, 0, 0)としてブレンドされます。

無劣化なら重なっている部分の色が同じためRGB(0, 0, 0)となり、レベル補正で白の出力を下げても色は替わらないはずですが、結果は画像の通りです(32bitでもアルファのかかっている部分がちょっとグレースケールになっていますが)。

ということで、「無劣化」ではないのでご注意ください。

しかしながら不可逆とはいえ、ブラウザベースでアルファを維持したままインデックスカラーに出来るのは大きいので、有用に使いたいですね。

tags