スマホの写真は一枚で数百万画素もあるのに、ファイルは数MBで収まってる。その「小さくする」が圧縮で、性格の違う二つの道があるんだ ── JPEG は少しだけ捨ててうんと小さく(写真向き・元には完全には戻らない)、PNG は一切捨てずに無駄だけ畳む(線画・文字・透過向き・完全に元へ戻る)。「PNG って何?」の答えはここにある ── 捨てないから、画質のつまみがそもそも無いんだよ。
なぜ捨てて平気なんだろう。人の目は、広いなだらかな明暗には敏感で、細かい急な変化には鈍い。JPEG はその「目の鈍いところ」だけを狙って削る ── つまり、目に分からない範囲で捨てる、という賭けなんだ。
では、細かい変化だけを、どう選んで捨てるか。JPEG は写真を 8×8 のブロックに切って、ブロックごとに縞模様の波の重ね合わせに分解する(DCT)。そして細かい波ほど大きい数で割って丸める(量子化)と、もともと小さい細かい波の強さは、ぱたぱたと 0 になって消える ── これが「捨てる」の正体で、心はローパスフィルタそのものだよ。残った波だけで描き直すから、鋭い縁やブロックの境目に、さざ波(リンギング)や段差(ブロックノイズ)が残る。崩れがそこに集まる理由は、これなんだ。
触り方:崩れを見るで画質を下げると、サイズが激減すると同時に、PNG(無劣化)との差と、JPEG が捨てた所(差分)が白く浮かぶ。中の計算を見るでは、本物の 8×8 を ①画素 → ②DCT → ③量子化 → ④逆DCT、と数字で一歩ずつ追える。写真の好きな場所をタップすれば、なだらかな空は高周波がほぼ 0、鋭い縁は高周波が立つ ── それが、その場で見えるよ。
学びの道:① 1次元の「隣との差」 → ② 2次元の畳み込み(PixLab) → ③ 波に分解して捨てる(いまここ)。なぜそうなるかを式でじっくりは 解説(写真が小さくなる仕組み)。