无损数据压缩
无损压缩技术
多数的无损压缩程序会依序进行这两个步骤:
产生输入数据的统计模型
利用这个统计模型将较常出现的数据用较短的比特序列表示,较不常出现的数据用较长的比特序列表示
生成比特序列的编码算法主要有霍夫曼编码(也用于DEFLATE)和算术编码。算术编码能使压缩率接近信息熵所给出的最佳可能压缩率。而霍夫曼编码较简单快速,但在符号的出现概率接近1的时候效果不彰。
有两种建构统计模型的主要方法:
在 静态 模型中,会分析数据并创建一个模型,然后将这个模型存储在压缩数据中。这个方法较简单且模块化,但缺点是模型本身可能耗费庞大的空间来存储。而且这个方法对单次的全部压缩数据都使用同一个统计模型,所以如果各个文件之间差异甚大,压缩效果并不好。
在 自适应 模型中,压缩数据的同时模型会不断的更新。虽然会导致压缩初期的压缩率不理想,但随着读取的数据增加,压缩效果也会提升。目前最热门的压缩方法都采用自适应编码方法。
常见的无损压缩格式
通用格式
变动长度编码法(RLE) – 一个非常简单的方法,在数据连续重复的情况下有不错的压缩率
LZ77与LZ78、LZW– 用于GIF和多种应用
LZF– 基本的LZ压缩法(deflate),对于快速压缩有做最优化(Lempel-Ziv Fast)
DEFLATE– 用于gzip、ZIP (从2.0版开始),也是PNG、点对点协议(PPP)、HTTP、SSH的一部分
bzip2– 使用Burrows-Wheeler变换,速度较DEFLATE慢但压缩率更高
LZMA– 用于7zip、xz等程序,相较于bzip2有更好的压缩率和更快的速度
LZO– 专为高速压缩/解压缩设计的方法,代价是压缩率较差
Statistical Lempel Ziv(英语:Statistical Lempel Ziv) – 结合统计方法和字典方法,相较于只采用单一方法有更好的压缩率
Brotli– 一个现代的基于LZ的压缩方法,速度大约与DEFLATE一样快,但拥有与LZMA相近的压缩率
图片格式
BMP(RLE)
GIF
JPEG 2000、JPEG XR,亦支持有损数据压缩
PNG
TIFF
3D图片格式
OpenCTM(英语:OpenCTM) – 用于3D三角网格的无损压缩
音频格式
ALAC
Ape
FLAC
LPAC
LTAC(英语:LTAC)
MPEG-4 ALS
OptimFROG(英语:OptimFROG)
Shorten(英语:Shorten (file format))
TAK
TTA
WavPack
WMA Lossless
视频格式
Huffyuv(英语:Huffyuv)
常见的无损压缩算法
LZW
ZIP
RAR
7-Zip
算术编码
免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。
- 有价值
- 一般般
- 没价值