我做了一个便携的多图层的批量水印工具。
我的修图工作流是Lightroom 调色裁剪RAW – Photoshop 细节处理JPG – Lightroom 打水印,在第三个环节Lightroom 不能直接调用Photoshop 处理之后的结果,需要重新导入,导致配置文件变得更大了。同时Lightroom 在windows 上的表现过于重型,为了打水印等待加载和导入的时间浪费太多,所以我想做这样一个工具。

前一阵子用codex 做了很长时间面部建模和一致化的工具MeiFusion 2,有了点心得,觉得这个应该是很简单的工作。
搜索了一下原型,可惜大多要不是基于网页的,要不然就是过于简陋难以使用。网页端的app 是个不错的选择,但是我对它有一点出于偏见的不信任。我还是不太希望pre-release 的照片被联网使用,而单独断网是一个容易稍微麻烦且容易被忘记的动作。
做的过程中稍微有一些自己的想法。
水平和垂直内嵌的比例是这个水印工具的重点。初衷是为了使不同尺寸、朝向和分辨率的图片在批量生成水印时 ,能产生一致的水印体验。以前用Lightroom 的时候还在想为什么水印的比例那块不用单位,知道实际做起来的时候才知道Adobe 的巧思,当然这种类似的理解在其他地方也发生了不少。虽然和Adobe 的实现方式可能不太一样,但是效果还不错。
在水印内嵌的相对边上我和Pete 也讨论了很多。我们一度加了横边 %/纵边 %/短边 % 三种选项,并且敲定了三种选项的最短翻译。但我意识到对于不同朝向的图片来说,用横边或者纵边是不一致且没有意义的。而对于同朝向的图片来说,分开这几个选项也没什么意义。所以后来我还是只留了目前的 “%”,即参考相对短边的比例。这符合这个软件的初衷。
再就是为了提高运行速度修改的多张图片的异步加载,异步加载因为产生了时间差,所以在时间差中间可能会进行的操作就造成了很多新问题。以及输出时的大小估算(这个我经常使用Photoshop 的旧版web 输出来控制Kicity* 的图片素材尺寸,尤其是banner 图,来优化首页的加载速度),因为图片太多时队列太挤了,只能忍痛把本batch 的总大小估算去掉了,只保留了当前选中图的估算。但是这些改动对效率的确提升很多。
还有就是一些边界性的限制,比如像素1的图片平铺排一百万张会让电脑卡死,或者单个的水印大小大于4096px……虽然我不会这么干。一开始我想通过一个机能判断来浮动控制水印大小,但是似乎4096px的限制更加直接和精简一些。可惜后来这个浮动判断在按百分比的水印里还是加上了。这不是好事情。在debug 阶段我又碰到了文字下行部分被裁剪,图层顺序和文字、图片水印在设置里的语义不一致,透明水印在平铺或越界时出现异常的问题,测试的重要性出来了。
还有就是字体问题。在之前的工程里,我遇到了一些cleartype 的老问题。不难解决。但是因为这次有了文字水印功能,字体的加载又成了一个新问题。比如西文和亚洲语言的语言显示、排序和字重,可变字体(天啊……)以及字体加载线程的内存泄漏。这些稍微麻烦但是不难。为什么Adobe 的软件加载字体的时候会卡一下,因为我的也会。
UI的调整是痛苦的。比如什么地方该用滑轨,加减号,多语言的边框对齐,还有本来我想的是水印区和导出去的预设是分开的,最后还是合起来了。Pete 给了我很多建议。Pete 还建议我要不要加上隐水印、自动加阴影、顶部自动加半透明渐变、黑白色自动适配。黑白色自动适配我觉得未来是有必要的。我还想着既然有隐水印了……因为能加隐水印就必然得能识别它,要不然一块识别图片是否是AI生成吧。但MeiWatermark 是一个简单的水印软件,所以以上功能全都没有做。
总之这是个愉快的旅程。我新的照片都是由MeiFusion2 处理,评分,并由MeiWatermark 水印的。AI 减轻了我很多工作负担。
