压缩格式与算法速查
有损与无损怎么分、打包和压缩是两件事、zip 和 tar.gz 差在哪、为什么图片视频再压也小不了多少。
压缩分两大类:无损压缩能完整还原原始数据,有损压缩会丢弃一部分信息换取更小的体积。选哪一种取决于这份数据「丢掉一点还能不能用」——文档和代码必须无损,照片和视频则可以在可接受范围内有损。
另一件常被混淆的事是「打包」与「压缩」:打包是把多个文件合成一个文件,压缩是让体积变小。这是两个独立步骤,tar.gz 这类扩展名正是两步叠加的结果。
1有损与无损压缩
判断标准是「压缩后再解压,内容是否与原始数据完全一致」。这是选择压缩方式前必须先确定的一件事。
| 类型 | 特点 | 压缩率 | 典型格式 |
|---|---|---|---|
| 无损压缩 | 可完整还原,一个字节都不差 | 通常几十个百分点 | zip、gz、7z、xz、png、flac |
| 有损压缩 | 丢弃部分信息,不可完全还原 | 通常能达到数倍甚至十倍以上 | jpg、mp3、mp4、webp(有损模式) |
| 文本与代码 | 必须无损 | 有损会直接破坏内容 | 用 zip / tar.gz / 7z |
| 照片 | 通常有损可接受 | 质量参数可调,收益最大 | 用 jpg / webp / avif |
| 音频 | 按用途选择 | 留存归档用无损,日常收听可有损 | flac 无损、mp3 / aac 有损 |
| 视频 | 几乎都是有损 | 无损视频体积巨大,仅专业后期用 | mp4 / mkv 为有损容器,含无损编码选项 |
| 已经压缩过的文件 | 再次压缩收益极小 | 不要重复压缩 | 如对 jpg / mp4 再打包压缩 |
「已经被压缩过的文件再压一次」是最常见的无效操作:对一批 JPG 图片打包成 ZIP,体积几乎不会变小,因为 JPEG 内部已经把可压缩的冗余去掉了。压缩只对存在冗余的数据(文本、日志、未压缩的图像/音频)有明显效果。
2打包与压缩是两件事
这是 Unix 系工具链的核心设计:一个工具负责打包,另一个负责压缩,可以自由组合。
| 步骤 | 工具示例 | 产物 | 说明 |
|---|---|---|---|
| 仅打包 | tar | .tar | 把多个文件合成一个,体积不减小 |
| 仅压缩 | gzip | .gz | 压缩单个文件,不负责把多个文件合成一个 |
| 先打包再压缩 | tar + gzip | .tar.gz / .tgz | 最经典的组合,Linux 下极为常见 |
| 打包加新算法 | tar + xz | .tar.xz | 压缩率更高,代价是更慢 |
| 打包压缩一体 | zip | .zip | 支持多文件,且跨平台兼容性最好 |
| 先进容器格式 | 7z / rar | .7z / .rar | 自带打包能力,压缩率与功能各有侧重 |
`gzip` 的设计是「只对单个文件流压缩」,所以它本身无法把一堆文件合成一个包。这也是为什么 Linux 上常见 `tar.gz`——先用 `tar` 打包,再用 `gzip` 压缩。理解这点,就不会奇怪为什么「`.gz` 里只有一份内容」。
3常见格式对照
不同格式的差别主要在压缩率、速度与兼容性三者的权衡上。
| 格式 | 类型 | 压缩率 | 兼容性 | 适用场景 |
|---|---|---|---|---|
zip | 打包 + 压缩一体 | 中等 | 最好,各系统原生支持 | 跨平台分享,通用性优先 |
tar.gz / tgz | 打包 + 压缩 | 中等 | Linux / macOS 常见 | 源码包、服务器备份 |
tar.bz2 | 打包 + 压缩 | 较高,速度较慢 | 需 bzip2 支持 | 对体积敏感且不急于解压 |
tar.xz | 打包 + 压缩 | 高,速度最慢 | 较新系统支持 | 分发时追求最小体积 |
7z | 打包 + 压缩一体 | 很高(用 LZMA) | 需专用工具 | 归档与备份,追求压缩率 |
rar | 打包 + 压缩一体 | 高 | 需专用工具(专有格式) | 历史上常见,现逐步被替代 |
zst / zstd | 压缩 | 较高,速度很快 | 较新,普及中 | 现代场景兼顾速度与压缩率 |
br / Brotli | 压缩 | 高(文本类突出) | 浏览器广泛支持 | HTTP 内容压缩 |
选择顺序可以简化为:需要发给别人就用 `zip`;只在 Linux 内部流转用 `tar.gz`;追求最小体积且能等就用 `7z` 或 `tar.xz`;现代服务端与网页传输考虑 `zstd` 与 Brotli。
4压缩算法与级别
算法决定「怎么找冗余」,级别决定「花多少时间去找」。级别越高通常越小,但收益递减且耗时增加。
| 算法 | 特点 | 常见载体 |
|---|---|---|
DEFLATE | 经典通用算法,速度与压缩率平衡 | zip、gzip、PNG 内部 |
LZMA / LZMA2 | 压缩率高,占用内存与时间较多 | 7z、xz |
Brotli | 对文本压缩效果好,浏览器原生支持 | HTTP 内容编码、部分字体格式 |
Zstandard | 压缩率与速度都可调,现代场景常用 | 数据库、打包分发、日志压缩 |
Bzip2 | 压缩率优于 gzip,但速度较慢 | .bz2 格式 |
| 压缩级别 | 一般 1 到 9,级别越高越慢越小 | gzip -6 常被认为是较好折中 |
| 收益递减 | 从 6 提到 9 的增益通常不大,耗时却明显增加 | 不必盲目追求最高级别 |
压缩级别的收益递减很明显:很多场景下从默认级别提到最高级别,体积只多降几个百分点,时间却成倍增加。除非是分发一次、下载多次的场景(此时小一点更有价值),否则默认级别通常够用。
5压缩收益的判断
在动手压缩之前,先判断「这份数据还有多少可压缩空间」,可以避免做无用功。
- 文本类收益最高
- 日志、源代码、JSON、CSV 这类重复模式多的文本,压缩率常能达到六七成以上
- 位图图像中等
- 未压缩的位图(BMP)压缩空间很大,但 PNG 与 JPEG 已做过压缩,再包一层几乎没有收益
- 已压缩媒体几乎无收益
- MP4、MP3、JPG 内部已是压缩数据,再套 ZIP 体积基本不变
- 数据库导出文件高收益
- SQL 备份、数据快照这类文本化数据压缩效果明显
- 压缩与加密的顺序
- 一般先压缩再加密。加密后的数据接近随机,几乎无法压缩
- 传输时用内容编码
- 网页资源交给服务器做 gzip 或 Brotli 压缩,比预先压缩好文件更灵活
看完就能用的站内工具
全部工具总览 →关于「压缩格式与算法速查」的常见问题
zip 和 tar.gz 有什么区别?
核心区别在于职责划分。zip 是「打包 + 压缩」一体化的格式,它能直接把多个文件装进一个压缩包,兼容性最好,Windows、macOS、Linux 都能原生打开。tar.gz 则是两步叠加的结果:先用 tar 把多个文件打包成一个 tar 文件,再用 gzip 压缩它,得到 .tar.gz。这样做的好处是职责清晰、工具可以自由组合(同样的 tar 可以配 gzip、bzip2 或 xz),并且能更好地保留 Unix 的文件权限、符号链接等元数据,所以源码包与服务器备份常用它。选择上,跨平台分享用 zip 更省事,Linux 内部流转用 tar.gz 更常见。
有损压缩和无损压缩该怎么选?
判断依据是「丢掉一点数据你能不能接受」。文档、代码、程序、数据库备份这类内容必须无损,因为任何一个字节的改变都可能导致文件损坏或程序出错,所以要用 zip、gzip、7z 这类无损格式。照片、音频、视频则通常可以在可接受的范围内有损压缩,换取大幅减小的体积,这就是 JPEG、MP3、MP4 存在的原因。实际操作中还要注意:已经用有损方式压缩过的文件(如 JPG)再套一层无损压缩几乎没有收益,因为冗余已经被去掉了;而有损转换会叠加画质损失,反复转码会让质量持续下降。
为什么我把图片打包成 ZIP,体积几乎没有变化?
因为 JPEG、PNG、MP4 这类文件内部已经做过压缩,冗余信息基本被去掉了,再套一层通用压缩算法自然找不到多少可压缩的内容。压缩算法的工作原理是发现并消除重复模式,而这种模式在已经压缩过的数据里已经很少了。所以对这类文件,正确做法是重新做一次针对性压缩——图片用合适的质量参数重新导出,视频调整码率或分辨率,而不是在外面再包一层压缩包。真正压缩收益明显的对象是文本类数据,比如日志、源代码、CSV、SQL 备份,它们的重复模式多,压缩后往往能减小一大半。
网页资源该用哪种压缩?
服务端内容编码当前推荐 Brotli 与 gzip 组合。Brotli 对文本类内容(HTML、CSS、JavaScript)的压缩率通常优于 gzip,主流浏览器都已支持,缺点是对动态内容的压缩耗时略高。实践中的做法是:对静态资源预先压缩成 Brotli 与 gzip 两份,由服务器根据浏览器声明支持的编码返回对应版本,并对静态资源设置较长的缓存时间。要注意不要对已经压缩过的资源(JPEG、PNG、MP4)再启用内容编码,那只是白白消耗 CPU。另外 gzip 的压缩级别不必调到最高,默认或中等级别在体积与速度之间通常更划算。
继续查:相关内容
全部速查 →内容说明:本页速查数据由本站自行整理,事实性内容以对应官方规范与文档为准,未复制第三方速查表或百科的表述。数据最后核对日期:2026-10-05。若发现错误或已更新的标准,欢迎通过页脚反馈入口告知。
速查在线工具箱