如何获得最佳的标准 ZIP 压缩?

Jos*_*ley 27 compression zip

我不在乎压缩需要多长时间,我想要实现的只有两件事:

  • 绝对最佳的压缩比
  • 与标准阅读器兼容,例如 Windows 和 WinZip

因此,诸如 7-zip 之类的建议不会有太大用处,除非 7-zip 在标准 ZIP 压缩方面也稍好一些(而不是使用它非常好的 .7z 格式)。

理想情况下,我正在寻找:

  • 一个软件的推荐
  • 该软件的特定设置可实现绝对最佳压缩
  • 免费的东西

请记住,压缩需要多长时间不是问题!

最后一件事 - 有些文件可能会使用不同的设置更好地压缩,例如“字大小”或“字典大小” - 是否有可以分析文件并选择最合适压缩率的工具,或者 WinZip,7-zip等已经这样做了吗?

afr*_*ier 24

如果您希望与 Windows XP 中内置的 Zip 文件夹功能兼容,则只能使用 Deflate 压缩。我认为您甚至无法使用 Deflate64,更不用说 WinZip 和 PowerArchiver 的最新版本中提供的高级压缩方法(如 LZMA、PPMD、WavPack、Bzip2 等)。PowerArchiver 至少默认为这些文件使用 .zipx 扩展名——我认为 WinZip 还没有这样做。

7-Zip 可以创建的最小 zip 文件可以使用以下命令行完成:

7za a -mm=Deflate -mfb=258 -mpass=15 -r C:\Path\To\Archive.zip C:\Path\To\Files\*
Run Code Online (Sandbox Code Playgroud)

特别注意:7-Zip 的通配符解析器与系统上的大多数其他解析器不同。*.*表示所有具有扩展名的文件。 *表示所有文件。

以这种方式创建 .zip 文件(并且,大概是使用其他工具尝试制作较小的“标准”.zip 文件)真的非常非常慢。通过使用 7-Zip 或 WinRar 创建自解压档案,您很可能会节省大量时间和空间。

  • 前面的评论中“慢得多”意味着慢了 3 倍多一点。至于空间,较慢的选项提供大约的存档。与更快的版本(即 -mx=9 且不带 -mpass=15)相比,大小减少了 99.885%。因此,如果时间增加 3 倍,则只能节省 0.115% 的空间。因此,除非 0.115% 的增益非常重要,否则请选择 -mx=9 而不是 -mpass=15。 (3认同)
  • @Zom-B:你是对的,应该是“-mm=”而不是“-m0=”。`-m0=` 用于 `.7z` 档案。此外,7-Zip 手册指定 Zip 存档的“-mx=9”相当于“-mfb=128 -mpass=10”。我注意到,“-mfb=258 -mpass=15”总是比“-mx=9”慢得多,并且通常根本不节省太多空间(或者偶尔使用几个字节)更多的)。每隔一段时间,它就会节省相当多的空间。 (2认同)

Ano*_*non 10

我所知道的最好的 deflate(标准 ZIP 使用的压缩格式)压缩器是:

使用 Zopfli 将文件压缩文件大小与数据压缩进行比较(从原始存档):

????????????????????????????????????????????????????????????????????
?              ?Corpus size?gzip ­-9  ?7-­zip    ?kzip     ?Zopfli   ?
????????????????????????????????????????????????????????????????????
?Alexa-top-10k ?  693108837?128498665?125599259?125163521?123755118?
?Calgary       ?    3141622?  1017624?   980674?   978993?   974579?
?Canterbury    ?    2818976?   730732?   675163?   674321?   669933?
?enwik8        ?  100000000? 36445248? 35102976? 35025767? 34995756?
????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

即使在随机的 PNG 中,Zopfli 也能比 pngout 好 0.5%。Zopfli 是其中最小的一个。

  • @Panayotis Google [搜索 zopfli zip](https://www.google.com/search?q=zopfli+zip) 导致 https://github.com/google/zopfli/issues/29 ,其中讨论了如何zopfli 项目不会直接处理 Zip 文件,但包括对 AdvanceCOMP 的 advzip 等工具的讨论,该工具可以使用 zopfli 作为后端。 (2认同)

Isx*_*xek 5

假设您使用的是 Windows:如果您仍想使用 ZIP 格式,我建议您使用 Ken Silverman 的免费 KZIP 命令行实用程序,可在此处找到。将它复制到包含您需要压缩的所有文件的文件夹中,使用 CMD 转到该文件夹​​,然后运行以下命令:

kzip /r <filename of ZIP file> *.*
Run Code Online (Sandbox Code Playgroud)

正如 Roald 所建议的,最好包含kzip.exe驻留在系统 PATH 变量中的目录,以防止它被包含在存档/Zip 文件中。

到目前为止,我发现使用 KZIP 创建的 ZIP 文件比其他 ZIP 压缩程序创建的文件小 10-20%。它们也可以通过其他存档软件(Winzip、WinRAR、7-zip 等)和 Windows 完全打开。

  • 不把它放在那个目录中,而是放在你系统的 PATH 上怎么样? (5认同)

Dar*_*oid -1

它更多地限制了压缩器在工作时必须提供多少内存。使用 7-Zip,我会使用 .Zip 格式、超压缩、LZMA 压缩方法和默认 64MB 字典大小来打包存档。如果您有可用内存,请增加字典大小,但请注意,您将需要近 3GB 可用内存来压缩 64MB 字典。如果您有足够的内存,使用更大的字典应该可以让 7-zip 寻找更多匹配项并提供更好的压缩。LZMA 比 gzip(deflate/deflate64,我认为)和 bzip2 平均好 5%,根据内容高达 10-12%。

我不知道有什么工具可以找到最佳的单词/字典大小,但我认为您会发现压缩方法与输入数据具有更强的相关性,否则平均值/默认值应该很好。

  • 我在使用 LZMA 时遇到了一些麻烦 - 例如,无论我在 7zip 中尝试什么设置,该 zip 中的文本文件 (http://joshz.com/Bad.zip) 都不会使用 Windows 内置的解压缩器进行解压缩(我使用的是 Windows 7)。 (3认同)