使用ZIP Shrinker让ZIP文件更小

Hacker News Top 工具

摘要

ZIP Shrinker 是一款浏览器工具,通过使用 libdeflate 重新压缩、移除元数据和目录条目来减小 ZIP 文件大小,并支持 APK 和 EPUB 等格式。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/05/19 07:01

# 用 ZIP Shrinker 让 ZIP 文件更小 来源:https://evanhahn.com/make-zip-files-smaller-with-zip-shrinker/ 我构建了 ZIP Shrinker,一个用于压缩 ZIP 文件的小型浏览器工具。它同样适用于那些本质上是 ZIP 格式的其他文件,比如 APK、EPUB、JAR 等。 快来试试吧! (https://evanhahn.com/uploads/2026-05-16-zip-shrinker/) ## 它是怎么工作的? 从高层来看,这个工具 (1) 用更高压缩比重新压缩 ZIP 归档中的每个文件 (2) 移除所有元数据 (3) 删除目录条目。 ### 重新压缩 ZIP 文件通常使用一种叫做 Deflate (https://zlib.net/feldspar.html) 的算法进行压缩。 有一些工具可以重新压缩 Deflate 数据并使其更小,通常是通过花费更多计算时间来实现的。我采用了其中之一,`libdeflate` (https://github.com/ebiggers/libdeflate),并将其应用于 ZIP 中每个压缩条目。我选择 libdeflate 是因为它的性能;像 Zopfli (https://github.com/google/zopfli) 这样的替代方案虽然可以略微缩小体积,但需要*长得多*的时间。 作为这项工作的一部分,我创建了 `libdeflate.js` (https://codeberg.org/EvanHahn/libdeflate.js),这是一个针对 libdeflate 的 WebAssembly 封装。(我每次都乐在其中!) ### 移除元数据和目录 ZIP 文件中的每个条目都可以包含额外的元数据,比如注释。这些通常不被使用,如果存在的话,我的压缩工具会将其移除。这通常不会节省太多字节,但也没什么坏处。 删除目录则是一个稍有针对性的决定。通常,文件条目的存在就暗示了其所在目录的存在。例如,`foo/bar.txt` 暗示了 `foo` 目录的存在。某些 ZIP 文件会为目录单独添加条目,但由于大多数解压工具并不需要它们,我会将其删除。这会产生一个副作用:空目录也会被移除——如果这对你来说是个问题,请联系我 (https://evanhahn.com/contact/)。 如果你想了解整个项目的工作方式,请查看完整源代码 (https://codeberg.org/EvanHahn/zip-shrinker/)。 ## 效果如何? 我测试了几个 ZIP 文件来观察这个工具的能力。以下是一些测试结果: | 文件 | 节省空间 | | --- | --- | | Linux v6.19 源代码 | 15.8 MiB (5.62%) | | 古登堡计划中的《罗密欧与朱丽叶》EPUB | 51.2 KiB (18.16%) | | Signal for Android v8.3.4 (APK) | 25.6 MiB (30.06%) | 虽然不是特别严谨,但看下来挺有用的。 ## 我为什么做这个? 这个概念验证表明,你可以在不牺牲向后兼容性的前提下让 ZIP 文件更小。它可能对发送归档文件给他人有用,也可能有助于减少带宽和服务器成本。例如,如果古登堡计划用这种方法重新压缩他们所有的 EPUB 书籍,或许能节省一些费用。 当然,ZIP 并不总是最高效的格式。通常,像 `.tar.bz2` 这样的其他归档文件可以更小。但它们不具备向后兼容性! ZIP 也支持除 Deflate 之外的其他压缩方法。这些方法不常见,但你也可以使用它们来实现更小的体积。 如果你想要一个更小的 ZIP 文件,试试我的工具吧 (https://evanhahn.com/uploads/2026-05-16-zip-shrinker/)。

相似文章

BZip3

Hacker News Top

BZip3 是一种高性能的压缩工具,与前驱 BZip2 相比,提供更优的压缩率和速度,利用先进的算法如上下文混合熵编码和 Burrows-Wheeler 变换。

GetCompress

Product Hunt

GetCompress 是一个无损媒体压缩工具,无需切换上下文。