スタッフブログ

画像トリミングも一筋縄とはいかない

こんにちは、Yです。

最近は画像を編集する機会がたまにあったりします。といってもトリミングとかそういった程度の話。

スマホの写真アプリやWindowsアプリの「フォト」など、今や簡単な編集は画像閲覧アプリからできるようになりました。

ただ、スクショ画像をトリミングしたら、画像の容量が編集前より増えているのです。画像データは(メタデータや圧縮方式などの要素もありますが)原則縦×横の面積に比例して容量が増えます。明らかに単なるトリミング以外の処理が行われてなければ、サイズが増えることはあり得ないのです。

調べてみると、PNGは圧縮前の1ピクセルごとの色情報のことを「サンプル」と呼び、それをどの程度のメモリ容量で表現するかの設定があるのですが、それが1ピクセル当たり24bit(赤8bit+緑8bit+青8bit)から32bit(赤8bit+緑8bit+青8bit+非透明度8bit)に。つまり透明な所なんてないのに透明情報分のデータサイズがもろに乗っかったことになります。実際はここからzipファイルのように圧縮されるため軽減されるとはいえ、当然容量が増えてしまいます。

原因が分かれば、あとは不要に上がった色情報を減らすだけ。今回スクショしていたページで色数が多い箇所は絵文字程度だったのもあり、大幅に削減できました。

こういったPNGの「サンプルをできるだけ少ないメモリ容量で表現する」アルゴリズムは(ロスレス)WebPという近年普及したデータ形式でも、洗練されてこそあれ、基本的には同じ概念を使っているため、ほとんどのケースにおいてロスレスWebPはPNGの上位互換です。スクショを長期的に保管する場合はWebPに変換してから保存するのも十分ありでしょう。

前のページに戻る