article_image

给照片加水印,目的不外乎几种,或防盗防窃防误用,例如打上“某某版权所有”或“仅用于某某活动”;或追求美观;或与摄影同好分享拍摄参数,以互通有无。本文所谓的水印,在于后两者。水印原本非常硬核,多为第一类(常见诸官场),或者第三类(常见于发烧论坛),而自小米于2022年推出徕卡专属水印以来,水印的装饰价值也终于脱颖而出。

最初,许多并没有徕卡相机或合作款手机的人,也给自己的照片打上徕卡 Logo,这一阶段基本属于凑热闹、图新鲜;后来,有一些软件开始适配各种相机和手机机型,真实反映拍摄设备,这一阶段的玩家就理性许多。相比事实上没有任何知识产权限制的 Android,iOS 这边的现成软件寥寥无几,主要靠玩家自己制作 Shortcuts 动作,@24Says 就做过一款水印,他的摄影作品不仅美观,而且识别度很高。1不过,玩家们制作的水印动作通常太个人化,主要针对各自手头的设备,别人下载之后往往不知如何下手改动。我综合之前处理截图复杂数据的经验,设计了一款轻量级水印动作,同时也可以轻松拓展、更换个性模板。

Alt text
iPhone 样张-带水印
我手头的几台设备——iPhone、RICOH、FUJIFILM——都是定焦镜头,因此没有太复杂的数据。作为示例,本文提供的动作也不宜过于复杂,以免维护成本太高。

如何使用

示例动作适用于 iPhone2、RICOH 和 FUJIFILM 的产品,配有对应的模板,Shortcuts 会自动识别照片来源机型并套用模板,不需要手动操作。您也可以参考下一节,添加更多品牌或自定义模板。不过,除 iPhone 以外,我不能保证其他品牌的所有机型都可以正常加水印,使用相机的读者最好参照下一节检查具体的制造商名字。3

总之,先下载本文动作,用手机上的照片试一试!

我设计的水印动作有三组信息,从左到右、从上到下,列如下:

  1. Shot On + 相机品牌,品牌信息预先设置了模板,可以展示商标,而非单纯的本文;
  2. 机型 | 光圈 | 感光,列出主要参数,这里只是举例,故非常精简,您可以参照下一节内容添加更多信息;
  3. 日期 + 版权信息,使用前请将 © Minja 更改为您自己的权利信息,如果名字较长,可能需要参考下一节内容微调这一部分信息的摆放位置。

确定上述信息符合要求后,你可以选择任意一张照片,运行动作,静待几秒,就能得到带有水印的图片。如果是从相机中导入的照片,部分可能体积较大,Shortcuts 需要更多时间。本动作采用拼接图片的形式添加水印,不会压缩原图的尺寸,一般不伤质量——不过,加水印一般是为了分享到社交网络,大概也不需要太高的像素。

Alt text
用 Shortcuts 为图片添加水印

原理简析

为简化步骤和计算量,本方案集中处理水印,制作完成后再和原图拼接,而种种细节,也都集中在水印制作的步骤中。

用字典事先存储水印模板

自近几个版本以来,Shortcuts 可以在图片上叠加另一层图片或者文字,而相机水印,本质上就是图文的不断叠加组合。然而,Shortcuts 非常浪费资源,步骤越多越容易崩溃,鉴此,一旦确定喜欢的水印模板,不少内容最好事先载于模板图片上,避免每次都临时渲染、叠加。

你可以用任何绘图工具自制模板,我在示例动作中内置了三种,对应 iPhone、RICOH 和 FUJIFILM,其中已经配有 Shot On 字样和制造商商标,以减少一些叠放工作量——事实上,我后续叠放的只有文本。具体排列方式全凭个人好恶,只要在叠放图文时注意对准位置。

Alt text
事先自制 banner 模板

接着,将准备好的图片编码为 Base64 格式,并填入 Shortcuts 开头的字典(Dictionary)中。4

Alt text
Shortcuts 步骤:用字典存储模板图片

上图中的字典数据,多为 制造商Base64 编码 的一一对应。所谓字典,就是用 键(Key)-值(Value) 的形式存储信息,输入 即可获得对应的 。和传统的 If 串烧相比,数据越多,字典优势越明显,因为 If 会越来越长、步骤越来越多,而字典永远是固定步骤。Shortcuts 还有致命问题:编辑常常靠拖动,手一滑就容易拖错,步骤太长的时候还会死机,因此简短的字典也容易维护。

例言之,iPhone 的制造商是 Apple,当 Shortcuts 检测到该制造商时,就会选用对应的 Shot On iPhone  模板。至于其他相机制造商,您可以在电脑上查看文件详情,找到“Device make”信息。

Alt text
在照片详情中可以找到制造商信息

注意,理光(RICOH)的制造商名称为 RICOH IMAGING COMPANY, LTD. (末尾是两个空格)5,带有符号英文句号 .,这在字典语法中有特殊含义,会被 Shortcuts 错误理解。事情是这样的,假设你有下面的字典:

"iPhone":"图片A"
"FUJIFILM":"图片B"
"RICOH":{图:图片B}

iPhone,当然可以获得 图片A;但用 RICOH,你得到的就是一个子字典 {图:图片B},里面又是一组“键-值”对。如果想获得 图片B,就要使用带句号的语法 RICOH.图,先后使用 RICOH 两个键,把子字典中的数据提取出来。

最“快捷”的指令是写一个 If 分支,但我觉得这些分支不美观,就像重症晚期病人身上插满的导管。不妨将计就计,顺着 Shortcuts 的误会修改字典中的数据格式,将原本的文本换为子字典,将新字典的键设置为 RICOH 设备名中的两个英文空格 ,值继续填写模板的 Base64 编码。这个巧妙的转换,即可大幅精简 Shortcuts 步骤。此处固然是无奈迁就,而后面我们处理 Exif 信息时,将更积极地使用字典语法。

用字典获取 Exif 信息

建议在 iOS 设备上操作,macOS 上的 Shortcuts 至今(20230420)无法正常编辑变量,大概率会卡死、退出甚至死机。

稍微了解一些 Shortcuts 的读者可能知道,Shortcuts 中的照片对象有很多属性,例如拍摄时间、地点、分辨率,等等,我也据此做个一个相册自动分类动作。不过,镜头相关的硬核数据并不在默认属性中,而是一股脑塞在元数据字典(Metadata Dictionary)里,需要进一步将其提取出来。照片的元数据字典一般是以下格式(为方便阅读,已经在不破坏数据格式的前提下大幅简化)

Alt text
字典的简单示例

可以看到一个又一个的“键-值”对,并且还有多个层级的字典嵌套。示例动作中用到的光圈值 FNumber 就在其中,藏在一个子字典里。前文已经提到过提取子字典数据的语法,对应到获取 FNumber 的值上,就是 {Exif}.FNumber。将这段文本填入 Shortcuts 变量中的“Get Value for Key”一栏,即可获得光圈数据。

Alt text
Shortcuts 步骤:提取字典中的数据

其他参数,例如 ISO 感光度、拍摄日期和经纬度,大多可以如法炮制。之后的工作就是排列组合这些数据,并将其叠放在水印模板上。管见以为,参数主要是用于交流的,如果别人觉得你拍得不错,他可能想知道你用了什么机身、哪种镜头以及调了多少的 ISO,等等,如果有条件,观者也可以循着你提供的参数拍拍看。当然,这是站在摄影的角度,如果想把照片当作呈堂证供——无论是作品权利信息还是不在场证明——可能就更注重经纬度、时间和权利人等信息,不过这些恐怕不是本文所能解决的。

至于确定叠放时的位置与尺寸,纯属力气活,在电脑上用绘图软件提前量好即可。

Alt text
事先测好各个元素的大致位置

待添加好各项信息,剩下的事情就是把水印图片拉到和照片等宽,然后上下对齐、一拼,结束。


  1. 在马斯克还没有作乱的年代,我用 RSS 接收 Twitter 消息,24Says 的摄影作品总是在一堆图片中脱颖而出。
  2. 我没有 iPad,没测试过能否使用。
  3. 之所以要设置成自动识别设备制造商,一方面是这样能够大幅简化动作设计,不需要手动选择;另一方面,则是为了诚实展示信息,管见以为,没有必要给 iPhone 的照片贴上徕卡的商标,这不仅自欺欺人,甚至违法——据说作为徕卡的合作商,小米就起诉了。
  4. Shortcuts 可以用 Base64 编码格式存储图片,以免依赖外部文件夹或在线图片资源。
  5. 还是要啰嗦一句,我只用过两台 RICOH 相机,不保证所有机型的制造商名称都是这个格式。请自行确认。

author_avatar

Lawyer, macOS/iOS Automation Amateur