Compression 二进制数据的最佳压缩技术?

Compression 二进制数据的最佳压缩技术?,compression,Compression,我有一个大的二进制文件,表示图像中每个像素的alpha通道-0表示透明,1表示任何其他。这个二进制数据需要从文本文件中动态加载,在其中获得最大可能的压缩是很有用的。反压缩时间并不重要(除非我们谈论的是一分钟到一小时的跳跃),但文件需要尽可能小 到目前为止,我们尝试的方法是使用游程编码,然后是哈夫曼编码,然后将二进制数据转换为base64,然后是游程编码,但使用数字值表示1和字母等价物表示0来区分0和1(似乎给出了最佳结果)。然而,我们想知道是否有比这两种方法更好的解决方案,因为我们从逻辑的角度来

我有一个大的二进制文件,表示图像中每个像素的alpha通道-0表示透明,1表示任何其他。这个二进制数据需要从文本文件中动态加载,在其中获得最大可能的压缩是很有用的。反压缩时间并不重要(除非我们谈论的是一分钟到一小时的跳跃),但文件需要尽可能小


到目前为止,我们尝试的方法是使用游程编码,然后是哈夫曼编码,然后将二进制数据转换为base64,然后是游程编码,但使用数字值表示1和字母等价物表示0来区分0和1(似乎给出了最佳结果)。然而,我们想知道是否有比这两种方法更好的解决方案,因为我们从逻辑的角度来处理它,而不是考虑所有可能的方法。

我同意,您最好使用现有的经验证的图像格式。如果你必须自己做的话,你最终可能还是会得到一些与现有技术非常接近的东西

我想我应该存储以下字节重复了多少次 |10 | 1 | 1 | 0 | 3 | 1 | 5 | 0

会产生

1111111011100000

但是如果你看一下这个并在字节级别上优化它,你很快就会发现这几乎就是RLE压缩所做的。这么长的答案变短了,看看RLE;)


祝你好运

查看7-Zip。它有非常好的压缩比,通常是zip大小的十分之一,并且有许多编程语言的语言绑定


由于外部库是不可能的,我为此创建了一个自定义解决方案。系统使用游程编码来压缩数据,然后RLE编码的数据用base32表示(32个字符表示零,匹配集表示1)。这使我们能够以大约30KB的大小表示大约5MB的文件,而不会造成任何损失

有一些照片图像无损归档的对比测试。您可以在以下位置查看其中一个:


你看,有几十个这样的档案管理员。对于日常使用,我推荐7-zip。

为什么你不能简单地使用现有的内置压缩的流行图像格式,比如png,而不是发明自己的格式?Asaph+1。另外,哪种压缩技术是“最好的”在很大程度上取决于你拥有什么样的数据:想象一下通过调整照片和屏幕截图获得的1位图像。对于任何类型的图像(即照片的JPG和PNG),都有经过彻底优化和研究的图像压缩格式,经过几十年或几百年的工作。不要再发明轮子。解码数据的系统(魔兽世界)不能使用传统的图像-我们可以使用内置的图像文件格式,但系统中没有内置的处理图像的功能,我们需要对图像进行碰撞检测,所以二进制网格是必要的。如果你不能使用传统的格式,那么试着压缩数据看看你能从中节省多少钱呢?我必须承认我从未为魔兽世界开发过任何东西,所以我不熟悉它的局限性。有一点疯狂,就为VisualStudio带来了一个项目,让你制作WoW插件(),你可能想向他们发送一条消息,询问他们是否知道改进游戏文件压缩的好方法。介意提供一些代码吗?这里的Base 32很有意义。您将有很长的零模式,因此使用基数32意味着您可以在每个数字上存储更多的信息。因此,如果有512个零,则可以将其表示为G00。3字节而不是512字节。但是你正在处理一个最好的案例,所以这里就有了。@TastyLemons-你不需要代码示例,他解释了构建这个的所有需要。