JPEGで保存しなおすたびに、画像は少しずつ傷んでいきます。回数を決めて、その変わり方を目で確かめましょう。
画像はこの画面の中だけで処理され、どこにも送信されません。大きい画像は、長い辺を640画素に縮めて使います。
保存には、このブラウザのJPEGの機能を使っています。ブラウザによって、結果が少しちがうことがあります。
元の画像
0 回目
元の画像(拡大)
0 回目(拡大)
画像をクリックまたはタッチすると、四角の場所を6倍に拡大して見られます。
グラフをクリックすると、その回の画像を上で見られます。条件を変えて何回か試すと、線を重ねて比べられます。
スマートフォンで撮った写真や、Webページの画像の多くはJPEGという形式で保存されています。JPEGは、人の目に目立ちにくい細かい情報を捨てることでデータ量を大きく減らす、非可逆圧縮の形式です。一度捨てた情報は、もう元には戻せません。
では、JPEGの画像を開いて、もう一度JPEGで保存したらどうなるでしょうか。保存するたびに、また少しずつ情報が捨てられていきます。このように、保存や変換をくり返すたびに品質が下がっていくことを世代劣化といいます。コピーのコピーを取るたびに文字がかすれていくのと似ています。
このページでは、同じ画像をJPEGで何回も保存しなおし、1回ごとの画像を見比べられます。ただし実際にやってみると、「保存のしかた」によって傷み方が大きくちがうことに気づくはずです。
JPEGの圧縮は、おおまかに次の順で進みます。
情報が捨てられるのは、3の「丸める」ところです。保存するときに選ぶ「画質」は、この割る数の大きさを決めています。画質を下げるほど大きな数で割るので、たくさんの成分が0になり、ファイルは小さくなりますが、ブロックの境目が見えたり、文字のまわりにもやもやしたノイズが出たりします。
出典:CCITT Recommendation T.81(ISO/IEC 10918-1)"Digital Compression and Coding of Continuous-tone Still Images"(1992年)
「そのまま保存しなおす」を選んで試すと、1回目の保存で画像は少し変わりますが、2回目からの変化はとても小さく、何回か保存するうちに、ほとんど変わらなくなることが多いはずです。グラフの線が、途中から横にまっすぐになります。
これは、四捨五入を2回しても結果が変わらないのと同じ理由です。1回目の保存で、ブロックの成分はすでに整数に丸められています。同じ区切り方で、同じ数で割って丸めなおしても、ほぼ同じ値に戻ってしまうのです。完全に同じにならないのは、画像を開くときにも画素の値を整数に丸めるため、そこで小さな誤差が生まれるからです。その誤差も、回数を重ねるうちに落ち着いていきます。
次に「区切りをずらして保存」を選んでみましょう。今度は、回数を重ねるほど元の画像とのちがいが大きくなり続けます。文字や輪郭のまわりのもやもやがだんだん広がり、色もにじんでいきます。
画像の端を少し切り抜いたり、回転させたりしてから保存すると、8×8のブロックの区切りの位置が変わります。すると、前の保存できれいに丸められていた成分が、別の区切り方で計算しなおされ、新しい丸めの誤差が加わります。それが毎回くり返されるので、傷みが積み重なっていくのです。このツールでは、保存するたびに区切りの位置を数画素ずつずらして、その様子を再現しています。
「毎回ちがう画質で保存」でも、割る数が毎回変わるため、変化が止まりません。ちがうアプリで開いて保存しなおすと、画質の設定が変わることがあります。
「区切りをずらして保存」のファイルの大きさのグラフにも注目してください。画像の条件によっては、傷んでいくのに、ファイルがかえって大きくなっていくことがあります。もやもやしたノイズは「細かい変化」の成分なので、それが増えるほど、0にならずに残る成分が増えるからです。画質が悪いことと、ファイルが小さいことは、いつも一致するわけではありません。
グラフの「元とのちがい」は、すべての画素の赤・緑・青それぞれの値(0〜255)について、元の画像との差の大きさを求め、平均したものです。
0なら元の画像とまったく同じで、数が大きいほど元から離れていることを表します。「元とのちがい(8倍に強調)」の表示では、この差を8倍にして、黒いほど元とちがう場所として表しています。人の目では気づきにくい小さな差も、どこで起きているかが分かります。
可逆圧縮と非可逆圧縮のちがいや、画質とファイルの大きさの関係は、「データ圧縮を体験しよう」でも確かめられます。