大家好,我需要使用 zlib 的压缩级别方面的帮助。我正在尝试为游戏编写一个应用程序,该游戏对文件进行 zlib 压缩。
我可以毫无问题地解压缩文件,但无法将文件重新压缩到同一级别。重新压缩的文件总是稍大一些。我需要压缩文件的大小相同或更小,因为游戏不会读取更大的文件。
我的应用程序是用 C# 编码的。我尝试过使用 zlib.net 以及 system.io.compression 命名空间,但即使指定了最大压缩,两者也无法充分压缩文件。
对于 System.IO.Compression 命名空间,我指定 CompressionLevel.Optimal。
对于 zlib.net,我指定 zlib.zlibConst.Z_BEST_COMPRESSION 。
我附上了下面的文件,其中包括原始文件以及使用 zlib.net 和 system.io.compression 压缩的文件。
感谢您提供的任何帮助:
最佳答案
通过使用命令行工具 gzip -9
压缩解压后的数据,我能够准确地复制您的 000C_original_file.zlib
,然后通过剥离gzip header 和尾部,并用 zlib header 和尾部重新包装它。几乎可以肯定,原作就是这样制作的。
正如 @usr 建议的那样,您可以使用 Zopfli 重新压缩以获得更小的文件。我用过pigz -11z
使用 Zopfli(压缩级别 11)压缩为 zlib 格式,结果比原始文件小,为 3863127 字节,而原始文件为 3942494 字节。
关于c# - zlib 压缩大于最大压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30002715/