大家好,我叫王笨笨。在过去的几个月里,因为工作需要,我比较多的关注了数据压缩技术的现状及其发展,并亲自动手实现了几个数据压缩模块。在这一过 程中,我发现这一领域的中文技术资料极其匮乏。为此,王笨笨决定编写这本《数据压缩教程》,以便有一个总结记录这几个月学习过程的机会。
谁需要看这本书
如果你仅仅希望将你自己的一大堆霸占硬盘空间的大文件压缩成单个的小文件,那么不要看这本书,去看 Winzip,ARJ,RAR 等应用程序的帮助好了;如果你仅仅想把手中的精美图片、语音信息、CD音轨乃至动画、视频压缩保存,那么不要看这本书,去学习和使用 Photoshop、MP3 Compress 等多媒体文件编辑压缩工具就足够了。
如果你对数据能被压缩到如此之小感到惊讶和迷惑不解,如果你想知道上面提到的这许多压缩工具是如何工作的,如果你正要为自己的应用程序加入灵活 的压缩、解压缩模块,如果你正在编写自己的图形图像编辑工具……那么,这本书就是你的选择,这里有详细的算法描述,有可供直接使用的源代码,有 Internet 上关于压缩技术的资源介绍,有对你进一步学习压缩技术的有效建议,快来吧!
不过记住,王笨笨比较笨,书中一定有不少缺点和错误,还望诸位高手指正。
压缩技术概貌
首先大致了解一下压缩技术的现状吧,不懂没有关系,了解一下而已。
压缩技术大致可以按照以下的方法分类:
压缩技术
|
/------------------------------/
通用无损数据压缩 多媒体数据压缩(大多为有损压缩)
| |
/----------------/ /------------------------------------/
基于统计 基于字典 音频压缩 图像压缩 视频压缩
模型的压 模型的压 | | |
缩技术 缩技术 MP3等 /-------------------/ AVI
| | 二值 灰度 彩色 矢量 MPEG2等
/------/ /-------------/ 图像 图像 图像 图像
Huffman 算术 LZ77 LZ78 LZW | | | |
编码 编码 /-------------/ 传真机 FELICS GIF PostScript
| | | 标准 JPEG等 JPEG等 Windows WMF等
UNIX下 接近无损 PKZIP、LHarc、ARJ、
的COMPACT 压缩极限 UNIX下的COMPRESS
程序等 的高级应用 程序等
本书也将大致遵循上面的结构展开,准备好了吗?开始
关于版权问题的几点补充说明
《笨笨数据压缩教程》中介绍的压缩算法中,有一部分受到美国专利法的保护(例如 LZW 算法的某些部分和高阶算术压缩算法的某些细节等) 。虽然在这一问题上王笨笨认为在计算机领域对某种抽象的算法而非程序实现加以保护有阻碍技术进步之嫌,但仍然需要提醒那些试图在自己的程序中实现某种压缩 技术并将程序用于商业目的的人们,在实现以前,最好先对技术专利情况加以了解,以免最终陷入商业被动。
《笨笨数据压缩教程》中提供的源代码有一部分由王笨笨本人编写,有一部分由文思软件工作室的其他程序员编写,还有部分源代码由王笨笨从因特网上 获得,但这些代码全部都是“自由代码”(free code)。如果你打算在你的程序中使用这些代码,你必须仔细阅读并遵守以下所有规定:
你可以使用、复制、发布、修改这些代码,并将其用于包括个人、组织、商业在内的各种目的,你不需要为此向我们支付任何款项。
我们不为使用这些代码的后果承担任何法律责任。但如果你在代码中发现了错误或对代码存有疑问,你可以使用 E-Mail 方式通知我们,我们会在力所能及的前提下提供技术支持。
不要以任何方式假定是你编写了这些代码。如果你将这些代码用于你的程序中,请你务必于程序的显著位置(例如 About 对话框或 Readme 文档中)注明“本程序中的某些代码由文思软件工作室提供”。
目录
第一章:轻松一下:数据压缩简史
第二章:技术准备:概率、模型和编码
第三章:奇妙的二叉树:Huffman的贡献
第四章:向极限挑战:算术编码
第五章:聪明的以色列人(上):LZ77
第六章:聪明的以色列人(下):LZ78 和 LZW
第七章:小结一下:压缩方法的比较和应用(附索引数据的压缩)
第八章:抓住特性:从行程编码到二值和灰度图像压缩
第九章:熟悉的格式:GIF 和 TIFF
第十章:损失一点精度:伟大的 JPEG
第十一章:媒体世界:声音和视频
第十二章:更高的目标:回顾与展望
你一定看出了本书目录中显现出来的层次关系。是的,本书是按照前言中对压缩技术的分类编排的。假如你想系统地学习和掌握压缩技术,最好按照章节 顺序依次阅读;当然,如果你仅仅把本书当作了解压缩技术的窗口,或者将本书作为一本速查手册,那么,你完全可以根据你的需要进行跳跃式的浏览。