文件压缩是如何进行的?原理是什么?
我们的日常工作和压缩文件息息相关,在网上下载的文件包经常是ZIP、RAR等压缩文件格式不说,我们日常使用的视频、图片、音频大多都是压缩文件格式。文件压缩技术是互联网运行的基础之一,它使得文件分享变得更加可行,降低了传输耗时。然而,你知道文件压缩是如何进行的吗?
压缩并不是什么神奇的技术,但也称得上奇思妙想的发明所得。下面,我们将介绍两种主要的压缩方式——有损压缩和无损压缩——的工作原理。
请注意,本篇文章将会尽可能简明地介绍工作原理,而不会使用复杂的数学公式等。如果你想更深入了解,可以从Wiki开始。
无损压缩
无所压缩的核心原理是祛除冗余。好吧,我们来简单地解释一下,比如下面的积木是原始文件:

它从上到下,由2个红色砖块、5个黄色砖块和3个蓝色砖块组成。而同样颜色的砖块我们可以看作相同的信息。那么,我只需要这样表示就可以:

每种颜色只保留1个砖块,然后在上面写上相应的数字。这样,积木占据的体积更小,我只需要额外存储3个数字,就可以用这3个砖块代表上面的所有砖块。
同样道理,在电脑存储文件的时候,主要的工作方式就是将重复的信息提取出来,然后有下面的字串:
bbbbbbccc
我们可以存储为:
b6c3
当然这只是举例子,具体的存储算法要更加复杂,并应用很多数学方法。但总归,无损压缩的方式就是尽可能提取原始数据重复的部分,并统一地进行表示。这种方式没有数据损失,也就是为什么被命名为无损压缩。
类似WinZip这样的程序采用的就是无损压缩技术,当你把文件压缩然后再解压,里面的数据不会有任何变化。而对于图像,PNG就是典型的无损压缩格式,原理也是相同的,即提取图像中相同的重复信息。
有损压缩
很多时候,使用无损压缩对文件体积的节约是很有限的。但幸运的是我们还有有损压缩技术。所谓的有损压缩,意味着可以抹除一部分信息,从而让文件更小。这并不像听起来那样不合理,事实上我们日常处理的许多文件都采用了有损压缩的技术。
举例来说,最常见的音乐格式MP3,实际用的就是有损压缩,但是你能听出它抹除了原声里的哪些信息吗?通常来说是不能的,被压缩算法抹除的部分,对于人耳并不能分辨,但对文件体积的缩小是非常有效的。但这种有损压缩如果应用过度,同样也会损害音质。
有损压缩技术被大量应用于媒体文件,比如图片、视频和音频,对于这类文件保留所有信息往往是不必要的,压缩结果在可接受的范围内即可。当然对于文字类文件是不存在有损压缩的,否则你看到的这篇文章可能就是无法阅读的了。
比如我们常见的JPEG格式就是有损压缩,我们在网络上看到的图片基本都是JEPG,是因为在这种使用环境下图片的质量并不需要非常非常高,而JPEG可以在适当减少质量的情况下减小文件体积。但有损压缩文件的缺点就是重新存储的时候可能被重复压缩,下面就是JPEG文件被进行3次重存储的效果:

由于参数设置较大,图片质量的降低非常直观。因此有损压缩尽管可以降低文件体积,但具体的使用还要视情况而定。
你需要记住的是,有损压缩真的会损失部分数据,如果你丢失了源文件,就意味着这些丢失的数据再也无法找回。
How Does File Compression Work?