article_image

编注:读过我早年文章的读者,可能知道我非常喜欢 ImageMagick,这款工具几乎可以称作“命令行版的 Photoshop”,各种图片处理都能用上,而遇上自动化工具更是相得益彰。得知 Se7en 在用 ImageMagick 处理漫画文件后,我马上约他写了这篇文章。由于涉及较多背景知识,我插入了大量脚注,如无特别说明,本文的脚注均为我所加。此外,本文只介绍优化漫画文件的方法,不会提供漫画资源下载。——Minja

此流程需要用到以下 App、工具:

Manga_Trim.script 下载

Hazel 规则下载

效果展示

网络上下载的 .zip 等压缩包格式的漫画,其漫画原图时常存在四周白边较大的问题,在 Kindle, iPad mini 等屏幕尺寸较小的设备观看,浪费屏幕空间。ImageMagick 的 trim 功能可以实现去除图片四周白边,且参数可调,正好能用于解决此问题。

Alt text
去除四周白边前后效果对比

如果使用一般的 epub 格式转换工具,如 calibre, 将已去除四周白边的漫画原图,转换为 epub, 只能生成「文本格式」的 epub。这种「文本格式」的 epub 在 Kindle 中观看,四周也会有很大的页边距,且无法调整。此时就需要用到 Kindle Comic Converter (KCC) 来执行转换格式的操作,将图片转换为「漫画格式」的 epub。

两种格式的 epub 在 Kindle Paperwhite 上的实际显示效果的屏摄如下图所示,注意上下页边距的差异:

Alt text
两种格式的 epub 显示效果屏摄

我经过一番摸索,形成了一整套的自动化流程来完成这些操作。真正需要我动手的,就是将下载的漫画压缩包放入指定文件夹。4

过程简析

此处以漫画 机械人 为例,整个自动化流程如下:

  1. 将下载的名为机械人的漫画压缩包放入 /Manga_Folder_Need_to_Trim 文件夹,Hazel 会自动将其解压缩至以 机械人 命名的子文件夹中;
  2. Hazel 通过 Manga_Trim.script 调用 ImageMagick 将 /Manga_Folder_Need_to_Trim/机械人 文件夹内所有 .jpg 等格式的原图逐一去除四周白边后,放入 /Manga_Folder_Trimed/机械人 文件夹,同时将 /Manga_Folder_Trimed/机械人 文件夹打上 Need_to_Convert 标签;
  3. Hazel 调用 KCC 将 /Manga_Folder_Trimed/机械人 转换为漫画格式的 epub 文件,并移动至 /Manga_Finished 文件夹。
Alt text
漫画处理流程

经过我个人的测试,去除四周白边的过程中,将 ImageMagick 的 -fuzz 参数设置为 30%, 能达到比较理想的效果。各位可以根据自身需求对照 ImageMagick 官网的文档自行调整参数。

漫画 epub 文件生成后,其实可以通过 Hazel 将整个流程中产生的临时性文件全部删除,但保险起见,我通常在确定最终的漫画 epub 文件没问题后,再手动将临时性文件删除。

Alt text
Manga_Trim.script 代码及 Hazel 规则

读者需要在 macOS 设备上打开下载的 Manga_Trim.script 和 Hazel 规则,将上图中红框标出的文件路径,修改为自己电脑上的文件路径,否则整个流程将无法正常运行。

在实现整个自动化流程中,我遇到的难点在于:

  1. .jpg 等格式的原图逐一使用 ImageMagick 去除白边,不漏项、不重复处理;
  2. 确定所有的原图都已经处理完成,可以使用 KCC 开始转换 epub 的操作。

针对难点 1, 我的做法是针对每张原图的文件名,生成单独的处理命令,再将所有的命令通过 && 拼接在一起,最后再执行拼接后的命令。AppleScript 本身难以实现拼接文本的功能,在此我安装了第三方 AppleScript 脚本包 RegexAndStuffLib, 并调用其 join strings 功能来实现文本拼接。安装及调用方法也很简单,将脚本包复制至指定文件夹即可,详见 RegexAndStuffLi 脚本包内置的说明文档。

针对难点 2, 我的做法是,待所有原图处理完后,为存储转换后图片的文件夹加上 Need_to_Convert 标签,当 Hazel 侦测到此标签,再使用 KCC 开始转换 epub 的操作,转换完成后,再用 Hazel 移除文件夹的 Need_to_Convert 标签。AppleScript 本身不支持为文件、文件夹添加标签,我安装了命令行工具 tag, 在 AppleScript 内通过 do shell script 的方式调用 tag 来为文件夹加上标签。

原版 KCC 命令行版本久未更新,对现有的新版本依赖包存在兼容性问题,在此我使用的是 bamless 针对新版依赖包适配过的版本。

Alt text
Hazel 内的 AppleScript 代码

下载 KCC 源文件并解压后, 将文件夹内的 kcc-c2e.py 设置为全局变量以供 Terminal 终端调用(例如我设置的变量名就是 kcc-c2e),同时还需要将上图中红框中 AppleScript 代码内的变量名修改为相同的名称。


  1. Hazel 是一款文件自动化工具,可以监测文件变化,并执行预设的自动化操作。本文的“自动优化”就是靠 Hazel 实现的,没有买 Hazel 的读者可以考虑 Keyboard Maestro 或 Automator 文件夹操作。如果对“自动”没有太多执念,只要求批量处理漫画文件,则可以略去文件自动化相关的部分。
  2. RegexAndStuffLib 是一个脚本库,提供了一些基本的字符串操作命令,可以避免自己从头编写这类脚本。并非必需,但如果您不太想自己写 AppleScript 脚本,则此工具可以大大简化自动化动作制作流程。
  3. tag 用于给文件加标签。在本文中,其用于标记哪些文件可以交给 KCC 处理,当然,如果你有其他挑出文件的方法,也不一定要使用 tag。
  4. 图上的差别或许没有那么明显,但对于使用 6 寸或 7 寸 Kindle 的读者而言,节省下来的这点空间恐怕就是能看和不能看的分水岭。