jpegで保存を繰り返す
新規保存で劣化していくJPEG形式の画像の様子をとらえたムービー - GIGAZINE
すでに追記があるけど、件のムービーは前回保存時よりQualityを落としながら読み込み保存を繰り返してるんだと思う。試しに似たようなことをやってみた。
use Imager; use strict; use warnings; my $base = 'test'; my $ext = '.jpg'; my $file = 'test.jpg'; my $img = Imager->new; for(0..99){ $img->read(file=>$file); $file = $base . $_ . $ext; $img->write(file=>$file, jpegquality=>100-$_); #前回保存時よりQualityを減らしていく }
test0.jpg
test49.jpg
test99.jpg
ムービーと似た画像ができたよ。
今度はQualityは落とさずに固定。読み込み〜保存を1000回繰り返す。
use Imager; use strict; use warnings; my $base = 'test'; my $ext = '.jpg'; my $file = 'test.jpg'; my $img = Imager->new; for(0..999){ $img->read(file=>$file); $file = $base . $_ . $ext; $img->write(file=>$file, jpegquality=>80); #qualityを固定 }
test0.jpg
test999.jpg
フォトライフは再圧縮しちゃうので比較画像のアップロード先としては適切じゃないけど、ムービーみたいな酷いことにはならないことは分かるかな。
Name MD5 Bytes ----------- -------------------------------- ------- test0.jpg 505831637146568AFE85EC37C3949141 24,713 test1.jpg 8D4CFB1337F7F95F0EE21DD68A243BC3 24,715 test2.jpg 526D1EFBADDD81A6B1EAB6346F2E59BE 24,719 test3.jpg D49CFDCE6ACAE9E22E15ED81B594D452 24,720 test4.jpg DC667B9AEBD5424E53122E00C63F62BD 24,715 test5.jpg 25F0C995688B8042F8A4022B21BB9B35 24,715 test6.jpg 25F0C995688B8042F8A4022B21BB9B35 24,715 . . . test999.jpg 25F0C995688B8042F8A4022B21BB9B35 24,715
md5とったら test5.jpg以降は完全に一致してた。(ただこれは同一エンコーダー同一設定で画像には一切手を触れずに保存を繰り返すというあまり現実的では無い実験なんで、これをもってjpegで保存を繰り返しても劣化は進まないと思ってはいけない)