最后更新:2026年7月28日

TL;DR CBZ(Comic Book Zip)不过是一个标准的 ZIP 压缩包,它将一系列顺序的图像文件——以及可选的元数据——打包成单个无 DRM 的漫画容器。由于它基于无处不在的 ZIP 格式,任何归档工具都能打开,阅读器只需按字母顺序排序图像即可按顺序显示页面。现代 CBZ 通常包含 ComicInfo.xml 以提供丰富的库数据,使用高效的图像编解码器如 WebP/AVIF,甚至嵌入 HTML 以实现交互式“增强”漫画。
CBZ 到底是什么?
- 名称:Comic Book Zip – 一个带有
.cbz扩展名的 ZIP 文件。 - MIME 类型:
application/vnd.comicbook+zip(2012 年在 IANA 注册)。 - 起源:由 ComicRack 社区(2005‑2008)推广,作为 CBR 或 PDF 等专有格式的开源替代方案。
- 跨平台:可使用任何兼容 ZIP 的工具打开(7‑Zip、WinRAR、macOS Archive Utility、Linux
unzip)。检查内容无需特殊软件。
实际上,CBZ 只是一文件夹,其中包含图像(JPEG、PNG、WebP 等),压缩后改名。正是这种简洁,使其成为 PC、平板和手机上数字漫画的事实标准。
CBZ 内部:文件结构
一个结构良好的 CBZ 遵循扁平层级——没有额外的嵌套——因此阅读器可以即时定位页面。下面是典型的树形视图:
MyComic.cbz
│
├─ 001.jpg ← first page (front cover)
├─ 002.jpg
├─ 003.jpg
│ …
├─ 050.jpg ← last page (back cover)
├─ ComicInfo.xml ← optional rich metadata
└─ cover.jpg ← optional thumbnail for library views
关键要素
| 元素 | 它是什么 | 为何重要 |
|---|---|---|
| 顺序图像文件 | 命名方式使其按字母顺序排序(001.jpg、002.jpg,…) | 确保在所有阅读器中页面顺序正确。 |
| 图像格式 | JPEG, PNG, GIF, WebP, AVIF, BMP, TIFF | 决定文件大小、视觉保真度和设备兼容性。 |
| ComicInfo.xml | 可选的符合 ComicRack 架构的 XML | 存储标题、作者、系列、期号、语言、页面类型标志,甚至缩略图数据。实现强大的库管理功能。 |
| 封面图像 | cover.jpg/cover.png 位于根目录 | 被许多应用程序用作漫画在图库中的缩略图。 |
| Unicode 文件名 | 现代 ZIP 支持 UTF‑8 | 对非拉丁语标题和国际漫画至关重要。 |
| ZIP 中央目录 | 索引位于归档文件的末尾 | 阅读器读取此信息以快速构建页面列表;此处损坏可能导致整个 CBZ 损坏。 |
因为归档只压缩已经压缩过的图像,最终大小通常仅是原始文件的总和,加上几千字节的 ZIP 开销(< 5 %)。
元数据魔法:ComicInfo.xml 和页面类型标志
虽然 CBZ 在没有任何额外文件的情况下可以完美工作,但添加 ComicInfo.xml 会将简单的图像堆栈转换为可搜索、描述丰富的漫画。以下是一个最小示例:
<?xml version="1.0" encoding="utf-8"?>
<ComicInfo>
<Title>Starship Voyager</Title>
<Series>Space Adventures</Series>
<Number>12</Number>
<Writer>Jane Doe</Writer>
<Penciller>John Smith</Penciller>
<Inker>Alex Lee</Inker>
<Publisher>Galaxy Press</Publisher>
<Year>2024</Year>
<LanguageISO>en</LanguageISO>
<PageCount>50</PageCount>
<Pages>
<Page Image="001.jpg" Type="FrontCover"/>
<Page Image="002.jpg" Type="Story"/>
<Page Image="025.jpg" Type="DoublePage"/>
<Page Image="050.jpg" Type="BackCover"/>
</Pages>
</ComicInfo>
为什么要这样做?
- 库工具(ComicRack、Calibre 等)可以根据这些字段进行排序、过滤和搜索。
- 页面类型标记(
FrontCover、BackCover、Advert、Deleted等)允许读者隐藏广告,仅显示故事页,或显示自定义封面缩略图。 - 面向未来 – 随着数字漫画倡议起草 CBZ v2.0 规范,清单文件(
manifest.json)可能会变为强制,但现有阅读器仍会支持ComicInfo.xml。
创建与转换 CBZ 文件(逐步)
1. 准备您的图像
- 将每页漫画导出为图像。
- 使用零填充的数字命名它们(
001.jpg、002.jpg、…),以确保正确排序。 - 选择适合受众的编解码器:JPEG 体积最小,PNG 用于无损艺术,WebP/AVIF 用于现代高质量压缩。
2.(可选)生成元数据
像 ComicTagger、cbr2cbz 或自定义脚本等工具可以使用 OCR + LLM 自动填充 ComicInfo.xml。此步骤是可选的,但对于大型库强烈推荐。
3. 压缩文件
# Navigate to the folder containing the pages
cd /path/to/pages
# Create a CBZ without extra compression (JPEGs are already compressed)
zip -0 -r ../MyComic.cbz *.jpg *.png ComicInfo.xml cover.jpg
# -0 = store (no compression) – speeds up the process
如果你的压缩工具没有自动完成,请将生成的 .zip 重命名为 .cbz。
4. 验证归档文件
import zipfile, pathlib, sys
def list_pages(cbz_path: pathlib.Path):
with zipfile.ZipFile(cbz_path, 'r') as z:
# Guard against zip‑bombs (max 500 MB uncompressed)
total = sum(z.getinfo(name).file_size for name in z.namelist())
if total > 500 * 1024 * 1024:
raise ValueError("Archive too large")
images = [n for n in z.namelist()
if n.lower().endswith(('.jpg', '.jpeg', '.png', '.webp', '.avif'))]
images.sort() # natural alphabetical order
return images
if __name__ == "__main__":
cbz = pathlib.Path(sys.argv[1])
for page in list_pages(cbz):
print(page)
运行 python list_pages.py MyComic.cbz 应该会打印出整洁、有序的页面文件名列表。
5. 转换为 PDF(如果您需要可打印版本)
unzip -q MyComic.cbz -d tmp_pages
convert tmp_pages/*.jpg MyComic.pdf # ImageMagick's `convert`
rm -r tmp_pages
趋势、安全性与 CBZ 的未来
| 趋势 | 正在发生的情况 | 对 CBZ 的影响 |
|---|---|---|
| Web‑first 分发 | 出版商将 CBZ 存放在云存储上,并使用预签名 URL。 | 更快的、无 DRM 下载;更简便的自出版。 |
| 混合/互动漫画 | 在归档中添加 index.html + 资产会创建“增强”漫画(音频、视频、HTML5)。 | 支持网页视图的阅读器可以渲染多媒体层。 |
| 采用 WebP 与 AVIF | ~15 % 的新发行(2024)使用这些编解码器。 | 30‑50 % 的尺寸缩减,同时保持质量——对移动带宽至关重要。 |
| AI 生成的元数据 | 像 ComicTagger 这样的工具现在使用 OCR + LLM 来填充 ComicInfo.xml。 | 更好的可发现性、自动标签和库组织。 |
| 云同步阅读应用 | Chunky、Perfect Viewer 等通过 Firebase/iCloud 同步阅读进度。 | 在手机、平板和桌面之间实现无缝阅读。 |
| 标准化推动(CBZ v2.0) | DCI 提议强制使用 manifest.json、多分辨率资源以及 <DRM> 标志。 | 这将使 CBZ 在高 DPI 设备上更稳健,并提供可选的版权管理。 |
| 安全意识 | Zip‑bomb 攻击(小型 ZIP → 解压后变为千兆字节)是真实的威胁。 | 阅读器现在强制执行提取大小限制,并使用安全库(例如,Python 的 zipfile 并进行检查)。 |
开发者安全提示
在提取 CBZ 之前,始终验证总的未压缩大小。正如 Python 代码片段所示的简单检查,可防止恶意压缩包耗尽磁盘空间或内存。
阅读器实际如何渲染 CBZ
- 打开压缩包 – 应用程序读取 ZIP 中央目录以快速获取条目索引。
- 过滤图像文件 – 非图像条目(
ComicInfo.xml、__MACOSX/等)将被忽略。 - 按字母顺序排序 – 由于零填充的命名,排序后的列表与预期的页面顺序相匹配。
- 解析元数据 – 如果存在
ComicInfo.xml,阅读器会提取页面类型标记、标题、作者等,并可能隐藏标记为Advert或Deleted的页面。 - 渲染页面 – Images are decoded (often with hardware‑accelerated JPEG/WebP decoders on modern e‑ink tablets) and displayed one‑by‑one, with pre‑fetching of the next few pages for smooth scrolling.
- 持久化状态 – Reading position, bookmarks, and annotations are saved locally or synced to the cloud, depending on the app.
正是这条流水线使得 CBZ 的速度和响应性堪比原生 PDF,却仍然完全开放且可编辑。
结论: CBZ 的优雅源于其简洁—a plain ZIP that anyone can open, edit, or repurpose. With optional ComicInfo.xml metadata, modern image codecs, and emerging standards, it continues to evolve while staying true to its DRM‑free, cross‑platform roots.