给照片加水印,目的不外乎几种,或防盗防窃防误用,例如打上“某某版权所有”或“仅用于某某活动”;或追求美观;或与摄影同好分享拍摄参数,以互通有无。本文所谓的水印,在于后两者。水印原本非常硬核,多为第一类(常见诸官场),或者第三类(常见于发烧论坛),而自小米于2022年推出徕卡专属水印以来,水印的装饰价值也终于脱颖而出。
最初,许多并没有徕卡相机或合作款手机的人,也给自己的照片打上徕卡 Logo,这一阶段基本属于凑热闹、图新鲜;后来,有一些软件开始适配各种相机和手机机型,真实反映拍摄设备,这一阶段的玩家就理性许多。相比事实上没有任何知识产权限制的 Android,iOS 这边的现成软件寥寥无几,主要靠玩家自己制作 Shortcuts 动作,@24Says 就做过一款水印,他的摄影作品不仅美观,而且识别度很高。1不过,玩家们制作的水印动作通常太个人化,主要针对各自手头的设备,别人下载之后往往不知如何下手改动。我综合之前处理截图和复杂数据的经验,设计了一款轻量级水印动作,同时也可以轻松拓展、更换个性模板。
我手头的几台设备——iPhone、RICOH、FUJIFILM——都是定焦镜头,因此没有太复杂的数据。作为示例,本文提供的动作也不宜过于复杂,以免维护成本太高。如何使用
示例动作适用于 iPhone2、RICOH 和 FUJIFILM 的产品,配有对应的模板,Shortcuts 会自动识别照片来源机型并套用模板,不需要手动操作。您也可以参考下一节,添加更多品牌或自定义模板。不过,除 iPhone 以外,我不能保证其他品牌的所有机型都可以正常加水印,使用相机的读者最好参照下一节检查具体的制造商名字。3
总之,先下载本文动作,用手机上的照片试一试!
我设计的水印动作有三组信息,从左到右、从上到下,列如下:
Shot On + 相机品牌
,品牌信息预先设置了模板,可以展示商标,而非单纯的本文;机型 | 光圈 | 感光
,列出主要参数,这里只是举例,故非常精简,您可以参照下一节内容添加更多信息;日期 + 版权信息
,使用前请将© Minja
更改为您自己的权利信息,如果名字较长,可能需要参考下一节内容微调这一部分信息的摆放位置。
确定上述信息符合要求后,你可以选择任意一张照片,运行动作,静待几秒,就能得到带有水印的图片。如果是从相机中导入的照片,部分可能体积较大,Shortcuts 需要更多时间。本动作采用拼接图片的形式添加水印,不会压缩原图的尺寸,一般不伤质量——不过,加水印一般是为了分享到社交网络,大概也不需要太高的像素。
原理简析
为简化步骤和计算量,本方案集中处理水印,制作完成后再和原图拼接,而种种细节,也都集中在水印制作的步骤中。
用字典事先存储水印模板
自近几个版本以来,Shortcuts 可以在图片上叠加另一层图片或者文字,而相机水印,本质上就是图文的不断叠加组合。然而,Shortcuts 非常浪费资源,步骤越多越容易崩溃,鉴此,一旦确定喜欢的水印模板,不少内容最好事先载于模板图片上,避免每次都临时渲染、叠加。
你可以用任何绘图工具自制模板,我在示例动作中内置了三种,对应 iPhone、RICOH 和 FUJIFILM,其中已经配有 Shot On
字样和制造商商标,以减少一些叠放工作量——事实上,我后续叠放的只有文本。具体排列方式全凭个人好恶,只要在叠放图文时注意对准位置。
接着,将准备好的图片编码为 Base64 格式,并填入 Shortcuts 开头的字典(Dictionary)中。4
上图中的字典数据,多为 制造商
和 Base64 编码
的一一对应。所谓字典,就是用 键(Key)-值(Value)
的形式存储信息,输入 键
即可获得对应的 值
。和传统的 If 串烧相比,数据越多,字典优势越明显,因为 If 会越来越长、步骤越来越多,而字典永远是固定步骤。Shortcuts 还有致命问题:编辑常常靠拖动,手一滑就容易拖错,步骤太长的时候还会死机,因此简短的字典也容易维护。
例言之,iPhone 的制造商是 Apple
,当 Shortcuts 检测到该制造商时,就会选用对应的 Shot On iPhone
模板。至于其他相机制造商,您可以在电脑上查看文件详情,找到“Device make”信息。
注意,理光(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)里,需要进一步将其提取出来。照片的元数据字典一般是以下格式(为方便阅读,已经在不破坏数据格式的前提下大幅简化)
可以看到一个又一个的“键-值”对,并且还有多个层级的字典嵌套。示例动作中用到的光圈值 FNumber
就在其中,藏在一个子字典里。前文已经提到过提取子字典数据的语法,对应到获取 FNumber
的值上,就是 {Exif}.FNumber
。将这段文本填入 Shortcuts 变量中的“Get Value for Key”一栏,即可获得光圈数据。
其他参数,例如 ISO 感光度、拍摄日期和经纬度,大多可以如法炮制。之后的工作就是排列组合这些数据,并将其叠放在水印模板上。管见以为,参数主要是用于交流的,如果别人觉得你拍得不错,他可能想知道你用了什么机身、哪种镜头以及调了多少的 ISO,等等,如果有条件,观者也可以循着你提供的参数拍拍看。当然,这是站在摄影的角度,如果想把照片当作呈堂证供——无论是作品权利信息还是不在场证明——可能就更注重经纬度、时间和权利人等信息,不过这些恐怕不是本文所能解决的。
至于确定叠放时的位置与尺寸,纯属力气活,在电脑上用绘图软件提前量好即可。
待添加好各项信息,剩下的事情就是把水印图片拉到和照片等宽,然后上下对齐、一拼,结束。
- 在马斯克还没有作乱的年代,我用 RSS 接收 Twitter 消息,24Says 的摄影作品总是在一堆图片中脱颖而出。 ↩
- 我没有 iPad,没测试过能否使用。 ↩
- 之所以要设置成自动识别设备制造商,一方面是这样能够大幅简化动作设计,不需要手动选择;另一方面,则是为了诚实展示信息,管见以为,没有必要给 iPhone 的照片贴上徕卡的商标,这不仅自欺欺人,甚至违法——据说作为徕卡的合作商,小米就起诉了。 ↩
- Shortcuts 可以用 Base64 编码格式存储图片,以免依赖外部文件夹或在线图片资源。 ↩
- 还是要啰嗦一句,我只用过两台 RICOH 相机,不保证所有机型的制造商名称都是这个格式。请自行确认。 ↩