【画像超圧縮】mozjpegとguetzliを比較してみた。guetzliが使えないことも?

The following two tabs change content below.
夜桜 なの
夜桜 なのです。 バーチャル女の子をしてるなの。 陸上自衛隊卒のレトルトカレー評論家 高校生の時にフルアセンブラでウィルスを作って、他人に渡したものの、児童相談所に通報されなかったという経歴があるの。 返せなくなった211億円のバーチャル借金があるの。ぐすぐす;; 取締役ブログ事業部部長、音楽事業部部長、IT業務部部長 etc...

JPEGファイル高圧縮ツールとして、Mozillaのmozjpegとgoogleのguetzliがあります。

Web閲覧者、特にスマホユーザーに対して、画像のサイズを節約することは、日々忙しい日本人にとって、すぐに閲覧してもらうことで、快適性が得られるとともに、Webへの滞在時間をより長くしたり、SEO対策にも効果があります。

以前は、guetzliのが圧縮率が悪いこともあったようですが、今はguetzliにほとんど軍配が上がっています。

比較前提のコマンドライン

#cjpeg -quality 84 -optimize inputfile.jpg > outputfile.jpg
#guetzli --quality 84 inputfile.jpg outputfile.jpg

変換元の画像

スキャナもしくはデジカメで写真した画像を ImageMagick(perlMagick)で各種加工を行なった後に、

$ret=$img->Write(“jpeg:$new.jpg”);

をしたファイルです。

50×50ピクセルの画像で比較してみました。

[use guetzli]org 1600bytes cjpeg 1172bytes guetzli 815bytes 3パケットの節約
[use guetzli]org 2017bytes cjpeg 2069bytes guetzli 1263bytes 7パケットの節約
[use cjpeg]org 3877bytes cjpeg 1446bytes guetzli 0bytes ?
[use guetzli]org 2369bytes cjpeg 1632bytes guetzli 1208bytes 4パケットの節約
[use cjpeg]org 3618bytes cjpeg 1336bytes guetzli 0bytes ?
[use guetzli]org 1576bytes cjpeg 1599bytes guetzli 987bytes 5パケットの節約
[use guetzli]org 2673bytes cjpeg 1938bytes guetzli 1421bytes 5パケットの節約
[use cjpeg]org 3739bytes cjpeg 1484bytes guetzli 0bytes ?
[use guetzli]org 2463bytes cjpeg 1742bytes guetzli 1304bytes 4パケットの節約
[use guetzli]org 2572bytes cjpeg 1830bytes guetzli 1202bytes 5パケットの節約
[use guetzli]org 2234bytes cjpeg 1512bytes guetzli 1079bytes 4パケットの節約
[use cjpeg]org 3697bytes cjpeg 1349bytes guetzli 0bytes ?
[use cjpeg]org 3447bytes cjpeg 1282bytes guetzli 0bytes ?
[use guetzli]org 2597bytes cjpeg 1825bytes guetzli 1285bytes 5パケットの節約
[use cjpeg]org 4655bytes cjpeg 1893bytes guetzli 0bytes ?
[use guetzli]org 2352bytes cjpeg 1645bytes guetzli 1220bytes 4パケットの節約
[use guetzli]org 1962bytes cjpeg 1333bytes guetzli 973bytes 3パケットの節約

横600ピクセルx縦不明ピクセルの画像で比較してみました。

[use guetzli]org 37643 cjpeg 17069 guetzli 15339 14パケットの節約
[use guetzli]org 109576 cjpeg 103254 guetzli 78648 193パケットの節約
[use cjpeg]org 175642 cjpeg 45409 guetzli 0 ?
[use guetzli]org 92570 cjpeg 34656 guetzli 26647 63パケットの節約
[use guetzli]org 236839 cjpeg 137459 guetzli 116672 163パケットの節約
[use guetzli]org 59609 cjpeg 29751 guetzli 26320 27パケットの節約
[use cjpeg]org 150422 cjpeg 33064 guetzli 0 ?
[use guetzli]org 63468 cjpeg 32035 guetzli 27636 35パケットの節約
[use guetzli]org 124827 cjpeg 114327 guetzli 86440 218パケットの節約
[use cjpeg]org 131527 cjpeg 29119 guetzli 0 ?
[use guetzli]org 85652 cjpeg 73957 guetzli 58313 123パケットの節約
[use cjpeg]org 149151 cjpeg 33090 guetzli 0 ?
[use guetzli]org 75188 cjpeg 40024 guetzli 34564 43パケットの節約
[use guetzli]org 111202 cjpeg 65608 guetzli 53139 98パケットの節約
[use guetzli]org 174737 cjpeg 96315 guetzli 87617 68パケットの節約
[use guetzli]org 193707 cjpeg 111699 guetzli 96459 120パケットの節約
[use guetzli]org 131740 cjpeg 128092 guetzli 90160 297パケットの節約
[use guetzli]org 250543 cjpeg 148462 guetzli 123352 197パケットの節約
[use cjpeg]org 139088 cjpeg 29498 guetzli 0 ?
[use guetzli]org 156735 cjpeg 139743 guetzli 108968 241パケットの節約
[use guetzli]org 138496 cjpeg 129687 guetzli 101558 220パケットの節約

パケットはスマートフォンの1パケット128bytesと仮定

あれ、guetzliで変換したものに0bytesが散見されるのですが

guetzli が以下のエラーを発したためです。

guetzli Unsupported input JPEG file (e.g. unsupported downsampling mode).
Please provide the input image as a PNG file.
Guetzli processing failed

Twitterでもクチコミがありました。

それでも、guetzliで変換したファイルのが大幅に圧縮率が上がっています。
しかし、guetzliで変換すると、mozjpegの300倍以上時間がかかってしまうんですけどね。これは最新パソコンで超高速化し、かつ大量同時並列できるようにしてから、Makefileに記述して、make -j 20 とかしないと解決しなさそうです。

しかし、これだけの圧縮率があるのですから、今後はスマホユーザーに対してより快適にブラウジングしてもらうと共に、パケット量の制限が厳しいならではの日本においては、ちょっとでも閲覧者に対してパケット料金を節約してもらうことでしょうか。

ちなみに、自動バッチでやるには、こんなスクリプトを使ったほうが良いでしょう。

#!/usr/bin/env perl

my $cjpeg="/opt/mozjpeg/bin/cjpeg -quality 84 -optimize";
my $guetzli="/usr/local/bin/guetzli --quality 84";

sub compress {
my($new)=@_;
`$cjpeg $new > $new.cjpeg`;
`$guetzli $new.src $new.guetzli`;
my $originalsize=-s "$new.src";
$originalsize+=0;
my $cjpegsize=-s "$new.cjpeg";
$cjpegsize+=0;
my $guetzlisize=-s "$new.guetzli";
$guetzlisize+=0;

if($cjpegsize >= $guetzlisize && $guetzlisize ne 0) {
print "[use guetzli]org $originalsize cjpeg $cjpegsize guetzli $guetzlisize\n";
`cp $new.guetzli $new`;
} else {
print "[use cjpeg]org $originalsize cjpeg $cjpegsize guetzli $guetzlisize\n";
`cp $new.cjpeg $new`;
}
unlink "$new.cjpeg";
unlink "$new.guetzli";
}
スポンサーリンク