第六章 亲自尝试压缩数据

 压缩,我知道的是可以把文件变小,压缩后文件不能直接被打开,需要解压后才能使用,而对于图像压缩我是一概不知,当我看完这章后,我知道了文件是字节数据的集合体,是以字节为基本单位存储的,还了解了两种算法,RLE算法和哈夫曼算法。

    RLE算法是指把文件内容用"数据×循环次数"的形式来表示的压缩方法。例如AABBBBCCDEEEEF用该方法表示为A2B4C2D1E4F1,比原来节省了2个字节(半角文数字的1个字符是表示1个字节),该压缩机制比较简单,适用于图像等,但是对于文本文件来说,同样字符连续出现的部分并不多,所以使用RLE算法会增大,这是该算法的缺点。这时就说到哈夫曼算法。

    哈夫曼算法,是指为各压缩对象文件分别构造最佳的编码体系,并已该编码体系为基础来进行压缩。它的关键在于“多次出现的数据用小于8位的字节数来表示,不常用的数据则可以用超过8位的字节数来表示”。这里还说到莫尔斯编码,它不是通过语言,而是通过“嘀嗒嘀嗒”这些长点和短点的组合来传递文本信息的,这里把“1”看作“嘀”,把“11”看作“嗒”,把“0”看作短点和长点的分隔符,各个字符之间需要加入表示间隔的符号。

    哈夫曼树,就是将数据的出现频率按照一定顺序排列,然后选出两个频率最小的相加,拉出两条线,在交点处写出两者相加的结果,若有多个选项时,任意选取即可,然后重复相加这一步骤,最终把这些数字汇聚到一个点上,该点就是根,然后在左边的分枝上写上0,右边的分支上写上1,最终按照顺序得到的结果就是哈夫曼编码了,还有就是用哈夫曼算法压缩的文件中,存储这哈夫曼编码信息和压缩过的数据。用哈夫曼算法压缩的文件,字符与字符之间不需要间隔符就可以区分。还有就是哈夫曼算法将重复次数多的字符用位数较少来表示,因此压缩比率也就大幅度提升。从该算法压缩过的文件中读取数据时,是以位为单位进行排查的,所以不用担心各字符之间混淆的问题。

    最后就是可逆压缩和非可逆压缩,可逆压缩就是指能还原到压缩前状态的压缩,非可逆压缩是指无法还原到压缩前状态的压缩(还原后的文件一部分数据会丢失)。对于图像来说,Windows的标准图像数据形式为BMP 是完全未压缩的。还有其他的图像格式,如JPEG、TIFF、GIF等,都可以使用上面的RLE算法和哈夫曼算法进行压缩,JPEG是非可逆压缩,解压后会变模糊,而GIF是可逆压缩,但是由于色数不能超过256色的限制,由于解压后,有些颜色信息会丢失所以也会模糊不清,而TIFF解压后会比原来的文件大,这是因为TIFF文件中附加了信息。

    压缩是利用特定算法使文件变小的机制。

posted @ 2019-02-16 16:35  心有远方  阅读(141)  评论(0编辑  收藏  举报