圧縮前のデータを完全に復元できる圧縮方式
可逆圧縮(ロスレス圧縮)とは、圧縮したデータを伸張(展開)すると、元のデータと完全に同じ(1ビットも違わない)状態に戻せる圧縮方式のことです。「可逆」とは「元に戻せる」という意味です。
身近な例で言うと、布団を圧縮袋に入れて空気を抜くイメージです。袋から出して空気を入れ直せば、元どおりふかふかの布団に戻ります。中身(情報)は1つも捨てていないので、まったく同じものが戻ってきます。
プログラムのソースコード・文書ファイル・実行ファイルなどは、1文字でも変わると意味が壊れてしまいます。こうしたデータは情報を絶対に失ってはいけないため、必ず可逆圧縮を使います。
可逆圧縮は、データに含まれる「規則性」や「繰り返し」を見つけて、より短い表現に置き換えることでサイズを小さくします。展開時はその規則を逆にたどることで、元のデータをぴったり復元できます。
| 手法 | 考え方 | 例 |
|---|---|---|
| ランレングス法 | 連続する同じ値を「値+回数」に | AAAA → A4 |
| ハフマン符号化 | よく出る値に短いビット列を割当 | 頻出文字を 0 |
| LZ系(辞書式) | 過去に出た並びを位置参照で表現 | ZIP / PNG |
図解の例では AAAA という4文字を A4(Aが4個)という2文字に置き換えています。これはランレングス法の考え方です。展開するときは「A4」を見て「Aを4回並べる」と機械的に戻せるため、元の AAAA が確実に復元されます。
復元できる理由は、圧縮の際に情報を一切捨てていないからです。あくまで「同じ情報を短い書き方に変換しただけ」なので、変換規則を逆に適用すれば必ず元に戻ります。これが可逆圧縮の本質です。
代表的な可逆圧縮の形式には次のものがあります。
・ZIP / LZH:文書・プログラムなど汎用ファイルをまとめて圧縮するアーカイブ形式
・PNG:画質を劣化させずに圧縮する画像形式(イラスト・スクリーンショット向き)
・GIF:256色の画像形式(LZW圧縮を使う可逆形式)
・FLAC:音質を一切落とさない音声圧縮形式
覚え方のコツ: 「ファイル・プログラム・テキストなど、1ビットも失えないデータ」には可逆圧縮を使います。PNG・GIF・FLAC・ZIP は可逆、対してJPEG・MP3・MPEG は非可逆、とセットで覚えると区別しやすくなります。
注意点として、可逆圧縮は情報を捨てられないため、非可逆圧縮ほど高い圧縮率は得られません。写真や音楽のように多少の劣化が気にならないデータでは、より小さくできる非可逆圧縮(JPEG・MP3など)が選ばれます。「完全復元が必要か」「サイズを優先したいか」で使い分けるのがポイントです。
可逆圧縮と非可逆圧縮(=非可逆とも呼ぶ、JPEGやMP3が代表)の最大の違いは「元に戻せるか・戻せないか」です。どちらを選ぶかは、そのデータが「完全復元を必要とするか」によって決まります。
なぜ非可逆圧縮が存在するのか。それは人間の感覚が不完全だからです。写真の色が少しずれても、音楽の高音がわずかに欠けても、私たちにはほとんど気づけません。こうした「気づきにくい情報」を意図的に捨てることで、ファイルを大幅に小さくできます。
・可逆:文書・プログラム・表計算ファイルなど、1文字・1ビットの違いが致命的なデータに使う
・非可逆:写真・音楽・動画など、多少の劣化が許容できるデータに使う
身近な例で言うと、銀行の通帳は1円も違っては困りますが(可逆)、SNS用の写真は少し圧縮されても構いません(非可逆)。データの「正確さへの要求」に応じて使い分けるのが鉄則です。
元に戻せる理由は、圧縮の際に「変換ルール」も一緒に保存しているからです。たとえばランレングス法なら「AAAA → A4(Aが4個の意味)」というルールを使って短く書き換え、そのルール自体もデータに含めて保存します。
展開(伸張)するときは、そのルールを逆方向に読むだけです。
・圧縮時:AAAA という繰り返しを見つけて A4 に書き換える
・展開時:A4 を見て「Aを4回並べる」と機械的に戻す
このように「変換の仕方を記録しておけば、逆に適用すれば必ず元に戻る」のが可逆圧縮の本質です。
なぜ非可逆は戻せないのか。非可逆圧縮は「人間が気づきにくい細かい情報」を完全に削除(捨てる)するためです。削除した情報はどこにも残っていないので、たとえルールが分かっても復元できません。捨ててしまった情報は戻せない——これが非可逆の意味であり、可逆との根本的な違いです。