如何才能实现最佳、标准的 ZIP 压缩?

如何才能实现最佳、标准的 ZIP 压缩?

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

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

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

理想情况下我正在寻找:

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

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

最后一件事 - 一些文件可能通过不同的设置压缩得更好,比如“Word 大小”或“字典大小” - 是否有工具可以分析文件并选择最合适的压缩比,或者 WinZip、7-zip 等是否已经可以做到这一点?

答案1

如果您想要与 Windows XP 内置的 Zip Folders 功能兼容,那么您只能使用 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\*

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

以这种方式创建 .zip 文件(以及可能使用其他试图创建较小“标准” .zip 文件的工具)非常非常慢。使用 7-Zip 或 WinRar 创建自解压档案很可能可以节省大量时间和空间。

答案2

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

Deflate 文件压缩文件大小比较使用 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║
╚══════════════╩═══════════╩═════════╩═════════╩═════════╩═════════╝

即使是随机的 PNG,Zopfli 也能比 pngout 好 0.5%。Zopfli 生产的是所有产品中最小的。

答案3

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

kzip /r <filename of ZIP file> *.*

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

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

答案4

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

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

相关内容