C# zlib压缩大于最大压缩

C# zlib压缩大于最大压缩,c#,compression,max,zlib,C#,Compression,Max,Zlib,嗨,伙计们,我需要使用zlib的压缩级别方面的帮助。我正在尝试为一个游戏编写一个应用程序,它对文件进行zlib压缩 我能够解压缩文件没有任何问题,但我不能将文件重新压缩到相同的级别。重新压缩的文件总是稍大一些。我需要的压缩文件要么是相同的大小或更小的游戏将不会读取文件更大 我的应用程序是用c#编写的。我尝试过使用zlib.net和system.io.compression名称空间,但即使使用指定的最大压缩,这两种名称空间也不能充分压缩文件 对于System.IO.Compression命名空间,

嗨,伙计们,我需要使用zlib的压缩级别方面的帮助。我正在尝试为一个游戏编写一个应用程序,它对文件进行zlib压缩

我能够解压缩文件没有任何问题,但我不能将文件重新压缩到相同的级别。重新压缩的文件总是稍大一些。我需要的压缩文件要么是相同的大小或更小的游戏将不会读取文件更大

我的应用程序是用c#编写的。我尝试过使用zlib.net和system.io.compression名称空间,但即使使用指定的最大压缩,这两种名称空间也不能充分压缩文件

对于System.IO.Compression命名空间,我指定CompressionLevel.Optimal

对于zlib.net,我指定zlib.zlibConst.Z_最佳压缩

我附上下面的文件,我已经包括了原始文件以及使用zlib.net和system.io.compression压缩的文件

感谢您提供的任何帮助:


在此处下载文件:

网络上提供了缩小ZIP文件(和压缩流)的工具。例如,有“佐夫利”。如果需要从Deflate流中挤出最后的字节,请使用以下工具之一进行后期处理。您需要使用
Process.Start
启动minifier工具。

通过使用命令行工具
gzip-9
压缩解压缩的数据,我能够准确复制您的
000C_原始文件.zlib
,然后通过剥离gzip头和尾文件并使用zlib头文件和尾文件重新包装压缩数据来重新包装压缩数据。这几乎可以肯定是原作的制作方式


正如@usr所建议的,您可以使用Zopfli来重新压缩,以获得更小的内容。我曾经使用Zopfli(压缩级别11)压缩到zlib格式,结果比原始版本小,3863127字节,而原始版本为3942494字节。

值得注意的是,7Zip应用程序中的ZIP/Deflate压缩支持通常优于旧版本的Deflate实现,在保持与旧版本兼容的同时(仍然可以使用旧版本解压)。并非所有Deflate的实现都是相同的


还要注意的是,类System.IO.Compression.GZipStream和DeflateStream实现Deflate而不使用任何头数据(纯Deflate算法,不支持任何存档格式).

不同的实现将产生不同的结果。这是意料之中的。Zopfli压缩到deflate格式甚至比7Zip/liblzma更好,尽管速度较慢。事实上,上的大多数图像都是在1995年初以这种方式制作的。它们早于zlib和libpng。不幸的是,由于许可,我不得不销毁我的PNG编写软件兼容性问题(gzip是GPL,我作为一名联邦雇员的工作必须是公共领域)。幸运的是,1995年5月,libpng和zlib就可以使用了,所以我重新开始了。