压缩与解压缩原理全解

赛事速递

🧩 压缩与解压缩原理全解

------从基础概念到 ZIP/7Z/JPEG 等常见格式的系统介绍

在计算机世界里,压缩(Compression)和解压缩(Decompression)是每天都在发生的事情:下载软件、传输文件、浏览网页、查看图片、听音乐......几乎所有场景都离不开它们。但压缩到底是什么?解压缩又是什么?各种 ZIP、RAR、7Z、PNG、JPEG 之间有什么区别?

本文将用最清晰、易理解的方式,带你系统掌握压缩的原理、常见算法与文件格式。

1. 什么是压缩?

简单来说:

压缩就是用更少的字节来表示同样的信息,从而减少存储空间和传输时间。

压缩按是否丢失数据分为两类:

类型

是否丢失数据

特点

使用场景

无损压缩

❌ 不丢失,可完全恢复

数据安全性高

文本、程序、ZIP、PNG

有损压缩

✔ 会丢失,不可完全恢复

压缩率极高

图片 JPEG、音频 MP3、视频 H.264

无损压缩像是折叠一件衣服 ;

有损压缩则像是剪掉不重要的布料再折叠。

2. 解压缩是什么?

解压缩就是将压缩后的数据重新"还原"回原来的形式。

无损压缩:可以 100% 还原

有损压缩:只能"接近"原始内容,但不会完全一致

3. 压缩的核心逻辑:减少冗余

无论是什么压缩算法,其核心思想都来自一句话:

找到数据中的冗余模式,用更短的编码来替代。

冗余主要包括:

① 重复冗余

例如:

复制代码

AAAAABBB → A5B3

→ RLE 原理

② 结构冗余

相邻像素颜色相似

→ PNG、WebP 使用滤波来减少变化

③ 统计冗余

出现越频繁的内容用越短的码

→ 霍夫曼编码、算术编码

④ 感知冗余

人眼/耳朵察觉不到的信息可以丢弃

→ JPEG、MP3、H.264

压缩的本质就是:舍弃不重要的、优化冗余的、替换重复的。

4. 压缩算法的整体流程(通用模型)

以 ZIP、PNG 使用的 DEFLATE 为例,其压缩步骤通常如下:

复制代码

原始数据

(1) 查找重复模式(LZ77)

→ 将出现过的片段用"引用"代替

(2) 统计频率(熵编码前的准备)

(3) 霍夫曼编码

→ 高频字用短码

→ 低频字用长码

压缩后的字节流

这就是现代无损压缩的基本骨架。

5. 常见压缩方法与原理解析

5.1 无损压缩算法

🚩 RLE(Run-Length Encoding)

原理:把连续重复的数据变成"值 + 次数"

示例:AAAAB → A4B1

适合:简单图像、扫描仪数据

🚩 LZ77 / LZ78 / LZW ------ 字典压缩

原理:记录出现过的字符串片段,用位置和长度引用

是 ZIP、PNG 的基础技术

🚩 DEFLATE(ZIP、GZIP、PNG 的核心)

组合拳:

复制代码

DEFLATE = LZ77 + 霍夫曼编码

速度快,效果稳定,兼容性极强。

🚩 霍夫曼编码 / 算术编码 ------ 熵编码

高频符号用更短的编码

类似摩斯电码

这是所有压缩算法里最关键的"后端"。

5.2 有损压缩算法

🚩 JPEG(图片)

主要步骤:

块划分(8x8)

DCT(离散余弦变换:从空间到频域)

量化(丢弃高频成分,人眼不敏感)

熵编码(霍夫曼)

适合照片。

🚩 MP3 / AAC(音频)

依赖人耳听觉模型:

丢弃听不到的频率

掩蔽效应:强音掩盖弱音

压缩效率极高。

🚩 H.264 / H.265(视频)

核心方法:

帧间差分(运动估计)

DCT/整数变换

量化

熵编码

可以将视频压缩到原始大小的 1/100 ~ 1/500。

6. 常见压缩文件格式的区别

以下是你最常遇到的文件压缩格式解析。

6.1 ZIP(.zip)

项目

说明

类型

无损

算法

DEFLATE

多文件

✔ 支持

特点

通用性最强,操作系统原生支持

优点:速度与兼容性最好

缺点:压缩率不是最高

6.2 GZIP(.gz)

项目

说明

类型

无损

算法

也是 DEFLATE

多文件

❌ 不支持(需配合 tar)

使用场景

Linux、HTTP 压缩

压缩率比 ZIP 稍高。

6.3 TAR、TAR.GZ、TAR.XZ

TAR 只是打包

TAR.GZ = TAR + GZIP

TAR.XZ = TAR + LZMA(超高压缩率)

XZ(LZMA)压缩率很强,但速度较慢。

6.4 7Z(.7z)

项目

说明

类型

无损

算法

LZMA / LZMA2

特点

⭐ 压缩率最高

缺点

压缩速度较慢,兼容性不如 ZIP

适合大文件归档。

6.5 RAR(.rar)

项目

说明

类型

无损

算法

专有(闭源)

特点

高压缩率、分卷能力强

Windows 上常用于大文件打包。

6.6 PNG(无损图片)

原理:滤波器 + DEFLATE

适合截图、UI 图标、透明图等

6.7 JPEG(有损图片)

原理:DCT + 量化 + 熵编码

适合照片,压缩率高但会失真

6.8 MP3/AAC(有损音频)

原理:去掉听不见的声音

7. 压缩比/压缩率是怎么计算的?

✔ 压缩比(倍数)

复制代码

压缩比 = 原始大小 / 压缩后大小

例如:100MB → 20MB

压缩比 = 5

"压缩了 5 倍"

✔ 压缩率(节省比例)

复制代码

压缩率 = (1 - 压缩后 / 原始 ) × 100%

同例:节省了 80% 的空间。

8. 小结

压缩的世界看似复杂,其核心原理却非常统一:减少冗余、优化编码、必要时丢弃不重要的信息。

你可以这样快速记忆:

ZIP = 通用型 + 无损

GZIP = Linux 与网络压缩神器

7Z = 压缩率之王

RAR = 稳定+分卷

PNG = 无损图片

JPEG = 有损图片

MP3/AAC = 有损音频

H.264/H.265 = 视频压缩核心

现代计算机几乎所有数据的传输与存储都依赖这些技术。