我有一个大的二进制文件,代表图像中每个像素的alpha通道 - 0表示透明,1表示其他任何像素。这个二进制数据需要从文本文件中动态加载,并且在其中获得最大可能的压缩将是有用的。解压缩时间并不重要(除非我们说的是一分钟到一小时的跳跃),但文件需要尽可能小。
我们到目前为止尝试过的方法是使用行程编码,然后是霍夫曼编码,然后将二进制数据转换为base64,并运行长度编码,但使用一个数字值和零字母等价物区分零和一(似乎给出了最好的结果)。但是,我们想知道是否有比其中任何一个更好的解决方案,因为我们从逻辑的角度来看待它,而不是查看所有可能的方法。
答案 0 :(得分:14)
由于外部库存在问题,我为此创建了一个自定义解决方案。系统使用行程长度编码来压缩数据,然后RLE编码数据用base32表示(零为32个字符,1为匹配集)。这使我们能够代表大约5MB的文件,只有大约30KB,没有任何损失。
答案 1 :(得分:2)
我同意,您最好使用现有的成熟图像格式。如果你必须自己做,你可能仍会得到一些与现有技术非常接近的东西。
我认为我想存储下一个字节重复的次数 | 10 | 1 | 1 | 0 | 3 | 1 | 5 | 0
会产生
1111111111011100000
但是如果你看一下并在字节级别上优化它,你很快就会发现这几乎就是RLE -compresion所做的。如此长的答案缩短了,看看RLE;)
祝你好运!答案 2 :(得分:2)
查看7-Zip。它具有非常好的压缩率,通常是zip大小的十分之一,并且具有许多编程语言的语言绑定。
答案 3 :(得分:0)
对于照片图像,有一些无损存档器的对比测试。您可以在http://qlic.altervista.org/LPCB.html
查看其中一个你看到有很多这样的档案馆。对于日常使用,我建议使用7-zip。