Appearance
CBZ 漫画
CBZ 是包含图片页的 ZIP。Readori 解压受支持图片,按自然文件名顺序组成页面,并提取首个 可读图片作为封面。
渲染方式:复用文字阅读器,而不是另建漫画 UI
CBZ 没有正文文本,不走"提取纯文本 → 智能分章"的路径。每一页图片被当作一个独立"章节", 复用阅读器已有的行内图片标记渲染机制([图片:file://...],这套机制原本是给 EPUB/网络 书源里嵌在正文中的插图用的)——这样漫画翻页就能直接复用现成的分页、目录、进度和 TTS 跳过等基础设施,不需要单独维护一套漫画阅读 UI。这也是为什么设置里的字体相关选项对漫画 页不生效,但背景色、亮度这些和"翻页容器"而不是"文字排版"相关的设置仍然对漫画生效。
落盘与幂等
解压出的页面会永久落盘到 <Documents>/LocalBooks/<bookId>_pages/,按 page_00000.jpgpage_00001.jpg 这样的顺序编号重命名,不是每次打开都重新解压一次到临时目录。重复调用 解压逻辑时,如果目标目录已存在且非空,会直接复用已经落盘的文件——避免"元数据阶段"先解压 一次拿封面、"后台正式解析阶段"又完整解压一次的重复开销。
支持的图片扩展名:jpg/jpeg/png/gif/webp/bmp/heic/heif(不区分大小写)。
页面排序
自然排序会把 2.jpg 放在 10.jpg 前,使用系统的 localizedStandardCompare,不是简单的 字符串字典序。目录本身和 __MACOSX 元数据目录、以 . 开头的隐藏文件(如 .DS_Store, macOS 压缩 ZIP 时常见的残留)都会被过滤掉,不会被误当成页面;无法解码的图片会记录诊断 并跳过。
安全与内存
- 检查 ZIP 路径穿越;
- 限制单图和总解压大小;
- 图片按需解码和缓存;
- 内存警告时释放非当前页资源;
- 不一次性把整本所有原始像素保留在内存中。
阅读体验
漫画页使用适合图片的缩放/连续浏览策略。文本字体设置不会改变图片,但背景、亮度和页面 间距仍可受阅读主题控制。
