🧩 压缩与解压缩原理全解
------从基础概念到 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 = 视频压缩核心
现代计算机几乎所有数据的传输与存储都依赖这些技术。