使用ZIP Shrinker让ZIP文件更小
摘要
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/)。
相似文章
@wangxiaoxin88:电子书爱好者注意了:有一款名为 zlib 的开源工具,可以把 Z-Library 直接塞进命令行……
介绍了一款名为 zlib 的开源命令行工具,可直接在终端中搜索、下载 Z-Library 电子书,支持 Kindle 推送、代理及自定义域名,并已集成 Claude Code 和 Codex 等 AI Agent。
@HowToAI_: 这个仓库将201GB文本压缩至6GB,且不损失任何精度。→ 比向量数据库小97% → 本地运行 →…
这个仓库将201GB文本压缩至6GB,且无精度损失,比向量数据库小97%。它可本地运行,并为Claude提供即插即用的MCP,完全开源且私密。
BZip3
BZip3 是一种高性能的压缩工具,与前驱 BZip2 相比,提供更优的压缩率和速度,利用先进的算法如上下文混合熵编码和 Burrows-Wheeler 变换。
GetCompress
GetCompress 是一个无损媒体压缩工具,无需切换上下文。
@0x0SojalSec: 这个工具将6000万个文本块从201GB压缩到仅6GB,且精度无损,可在本地笔记本上运行
该工具将6000万个文本块从201GB压缩到6GB,用于RAG且精度无损,使得在笔记本上实现强大的本地检索增强生成成为可能。