# 用 Hazel 自动优化漫画文件的显示效果（macOS）

> 本文公开全文。

原文：https://utgd.net/article/20112

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

- Hazel

- RegexAndStuffLib

- ImageMagick

- Kindle Comic Converter 命令行版本

- tag

Manga\_Trim\.script 下载

Hazel 规则下载

## 效果展示

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

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

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

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

## 过程简析

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

- 将下载的名为机械人的漫画压缩包放入 /Manga\_Folder\_Need\_to\_Trim 文件夹，Hazel 会自动将其解压缩至以 机械人 命名的子文件夹中；

- Hazel 通过 Manga\_Trim\.script 调用 ImageMagick 将 /Manga\_Folder\_Need\_to\_Trim/机械人 文件夹内所有 \.jpg 等格式的原图逐一去除四周白边后，放入 /Manga\_Folder\_Trimed/机械人 文件夹，同时将 /Manga\_Folder\_Trimed/机械人 文件夹打上 Need\_to\_Convert 标签；

- Hazel 调用 KCC 将 /Manga\_Folder\_Trimed/机械人 转换为漫画格式的 epub 文件，并移动至 /Manga\_Finished 文件夹。

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

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

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

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

- 将 \.jpg 等格式的原图逐一使用 ImageMagick 去除白边，不漏项、不重复处理；

- 确定所有的原图都已经处理完成，可以使用 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 针对新版依赖包适配过的版本。

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

---

[前往标准阅读页](https://utgd.net/article/20112?audience=web)
