你手机里有张 5 MB 的照片,想发给朋友,微信发出去的却只有几百 KB——这中间干活的,就是压缩。它的核心一句话:同一份内容,换一种更省地方的记法写下来。和整理行李箱一个道理:衣服还是那些衣服,卷紧、塞缝之后,占的箱子就小了。
举个能看见数字的例子。假设一段文本里反复出现"哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈"(16 个"哈"),原样记下来要 16 个字的位置。压缩程序的做法是记成"哈×16"——只用了三四个字符的位置,信息一点没少。这就是压缩的基本思路:找出数据里的重复和规律,用简短的代号代替冗长的原文。真实文件里的规律比"重复的字"复杂得多,但道理是同一个。
16个“哈”,换个更短的记法
- 01原来的记法
把16个“哈”逐个写出来
- 02换一种记法
写成“哈×16”,规则明确就能还原
这是说明重复规律的简化例子,真实压缩格式还要保存编码规则和其他信息。
两种压法:一点不能少 vs 可以扔一点
压缩分两大类,区别就在"还原"这一步:
1. 无损压缩:解压后和原来一模一样。 ZIP 压缩包、PNG 图片都是这类。它只用"换记法"的办法,一个字节都不许丢。合同、代码、表格这类错一个字都麻烦的内容,必须用无损。代价是压不了太狠——能压多少取决于原始内容,有的文件能缩得很小,有的几乎压不动。
2. 有损压缩:故意扔掉一些人不敏感的细节,换更小的体积。 JPEG 图片、MP3 音乐、在线视频都是这类。比如一张蓝天照片,天空有上万种深浅不同的蓝,人眼根本分不出来,有损压缩就把它们合并成几种,体积一下小很多。代价是:扔掉的信息永远找不回来,压得越狠,越容易看出模糊、色块或杂音。
所以压缩没有"好不好",只有"合不合用":要准确就无损,要小巧接受一点损失就有损。而且有个常见错觉要纠正:体积变小 60% 不等于画质损失 60%,编码器上的"质量 80"也不是"保留了 80% 的质量"——体积、参数和实际观感是三件事,关键内容(图表、文字截图)要放大实际看过才算数。
为什么不是压得越小越好
压缩是有成本的,三笔账值得知道:
第一笔:计算账。 压缩要算,解压也要算。采用更复杂的视频编码方式,可能增加压缩或播放时的计算负担;费不费电,还要看设备有没有相应的硬件解码能力——你是拿计算量换体积。
第二笔:重复压缩的账。 已经压好的文件(比如 JPEG 图、ZIP 包)再压一遍,基本不会更小,有时反而因为格式自身的额外信息而变大。就像真空袋里的被子,抽过一次气,再抽一次也瘪不下去了。
第三笔:安全的账。 压缩不等于加密。把文件压成 ZIP、改成陌生格式,只是让它变小,别人拿到照样能解开看内容。想保密,得另外加密。
两个容易混淆的地方
"无损"说的是数据层面,不是"你想保留的都保住了"。 无损保证解压后逐字节一致,但它不保证压缩过程中不出错——软件本身出 bug、传输中断,照样会坏文件。
"有损"不等于"一定看得出来"。 轻微的有损压缩,人眼人耳经常察觉不到差别,但数据确实少了。反过来,也别把"看不出区别"当成"没有损失"——原图一旦覆盖保存,就再也回不去了。