尼康云创-自动化导出多种色彩方案的照片
需求
我有一个 Nikon Z50II,基于尼康云创功能,我可以使用官方或“参与创摄者”的色彩方案。
而我并不是一个专业摄影师,更不会专业的后期调整。意味着本文也不是面向专业从业者的。
我只想从各种预设的滤镜中找到合适自己的,再调整一些非常简单的参数。
尼康云创允许我把 9 个色彩方案注册到机身,我可以在前期就套上滤镜,达到直出的效果。
但是找到适合自己的色彩方案是一件不太容易的事。
我们有以下两种方法来套用不同的色彩方案,以下操作技巧有很多网友分享,不在本文重点。
- 更换机身的 9 个色彩方案有一定的操作成本,即使这个功能设计得挺方便得了,但是还不算“随心所欲”。
- 有网友分享了这些色彩方案的 NP3 文件,可以用尼康工坊对 RAW 格式的照片修改不同的色彩方案。
- PS:尼康工坊里这个功能叫优化校准,本文统一称为色彩方案
不管那种办法,因为拍摄的题材不同、拍摄条件不同、心情不同,挑选合适的色彩方案还是比较困难的。
此前我只能试试网友推荐的色彩方案,但是没有自己经历过对比,其实比较“无感”,即使成片好看,也算不上“合适自己”。
困难的点在于操作,这些操作的成本远超于修图 APP 上切换滤镜的操作成本。
所以我想到的办法是:
- 继续按原有的流程出图发圈,则(色彩方案自动或关闭)拍摄-修图 APP-发布。
- 用尼康工坊套用不同的色彩方案,找到一个最接近发布效果的色彩方案
- 坚持一段时间,我就能确定一些“适合我的色彩方案”,然后放到机身上,也许就能做到“直出”了
下文是我为了简化“尼康工坊套用不同的色彩方案”这个操作而折腾的过程,
最终成果是“自动化套用色彩方案并导出 jpeg”,
然后我可以直接在导出的 jpeg 中选择喜欢的,并找到对应的色彩方案。
Power Automate
导入了色彩方案到尼康工坊之后,就能手动操作“切换色彩方案”了,只是这个操作比较累。
所以可以用 RPA 软件代替,我也是后来才知道这一类软件叫 RPA。
我一开始找到的几个里面,KeymouseGo比较简单,
我只需要录制-播放,然后要有中间文件。有了中间文件我就可以自己编程完成各种功能。
只要理解操作逻辑,理论上任何同类软件都能完成功能。
后面发现微软自家得 Power Automate 更佳,Win11 自带的。
这种方案的最大缺点是效率不高,不仅仅体现在一个图片导出的耗时比较长,更体现在RPA需要占据你的整个系统,意味着你无法同时开展别的工作。
Nikon SDK
初步了解
Nikon-SDK只要申请就能下载,包含一个示例程序,包含源码。
本来希望通过该 SDK 可以替换色彩方案并且导出。很可惜,SDK 只支持官方的色彩方案。
从示例程序以及文档都确认了“不支持自定义色彩方案”,
虽然文档提到“未安装到系统的色彩方案将报错”,但是没有提及“如何安装”,
而且我已经导入尼康工坊的色彩方案并没有被视为“安装到系统”,没有被示例程序列出,
从文档上看,这个方案似乎是不可行的
解析 NP3 滤镜文件的开源库
nikon-flexible-color-picture-control
找到这个库之后就有了新的思路。
首先 SDK 的示例工程是支持调整”picture control 3”的具体参数的,这也正好是尼康云创滤镜在尼康工坊里的实现。大部分滤镜都是基于[灵活颜色]调整具体参数的值来实现的,少量基于[黑白]等其他滤镜。
于是新的思路是,先解析 NP3 文件中具体的参数值,然后用 SDK 设置[灵活颜色],再设置具体参数值,最后导出图像为 jpg 格式。
煎熬的 SDK 开发
一开始我尝试参考示例工程的代码,仅抽离 SDK 的调用逻辑,先完成简单的【打开文件,获取图像数据】这样的基础功能。
但是失败了,不停的失败了。
在长达 2 个月的周末里,偶尔有空就搬出来调试一下,虽然总时间可能也不超过 20 小时,但是几百行代码,毫无进展的调试,永远卡在 GetImageData 返回错误码 4(参数错误)。不管是 AI 深度分析,还是人工一行一行对比代码,看起来和示例工程一模一样,甚至两边通过日志确认了每个参数都一致了,但就是跑不通。
绝望之际,我开始怀疑:是不是因为 Nikon SDK 本身就是基于 MFC 构建的,或者它隐式依赖了一些 MFC 的环境? 我之前的尝试是试图剥离 MFC,在一个纯净的 C++ 环境中运行,这可能导致了某些隐蔽的依赖缺失。
于是,换一个思路:打不过就加入。
既然剥离代码困难,那就直接在 SDK 提供的示例工程上进行修改,于是虽然从示例工程起步,但最终 100%全部重写了:
- 裁剪: 对于示例工程,首先做减法。删除了所有不需要的 UI 控件、菜单项和无关的业务逻辑,只保留了最核心的“打开文件”和“图像处理”链路。
- 重构: 将原本分散在各种 View/Doc 类中的逻辑,尽量收拢。示例工程是非常规整的,但是对于我只需要“导出”这么一个核心功能,反而显得臃肿,所以决定不要“架构/分层”,保持简单的一两千行代码即可。
- 扩展: 在保留 MFC 壳子的基础上,我添加了自己的业务逻辑
- 批量处理: 支持拖拽多个 RAW 文件和 NP3 滤镜文件。
- 自动遍历: 自动组合每一个 RAW 和每一个 NP3,生成预览图。
- 导出: 调用 SDK 接口导出最终的 JPEG。
结果
事实证明,这个策略是正确的。在示例工程的基础上修改,SDK 的所有功能都能正常工作。 虽然最终产出的程序依然带着 MFC 的古老 UI 风格(甚至还有那个经典的图标),但它完美实现了我的核心需求:自动化导出多种色彩方案的照片。
现在,我已经完成了一个可用的 DEMO,支持配置窗口输入、预览窗口展示,以及批量导出功能。 接下来的工作就是打磨 UI,把这个“开发者的玩具”包装成一个“像样的软件”。