我对Lua没做任何事
Lua可能是我所知道的最简单,最简洁的编程语言。(我知道一些。)
Lua的简单性也是它的最大弱点:从设计上讲,它是一种小型,简洁的语言,它没有内置很多东西,而这些东西是您希望从诸如Java之类的工业级语言或电池中找到的。 -包括的语言,例如Python。
Lua设计为由C扩展,在这种情况下,这意味着Lightroom的SDK。如果Adobe已完成工作,以提供Lua尚未内置的所需工具,那就太好了,但是有时您可能会发现自己需要外部工具来完成工作。
Lightroom API是否易于使用
唯一棘手的部分是,您需要以特定方式构建源代码并提供一个特殊Info.lua
文件来告诉Lightroom有关您的插件的信息。所有这些都在SDK docs中进行了说明。该SDK包括几个可运行的插件,包括一个相当复杂的“ hello world”插件,可以将其清除以获取有用的起始代码。
需要开发专用工具吗?
您仅需使用文本编辑器即可解决问题。
Lightroom中没有内置调试工具,但SDK中有调试日志记录工具。您可以WinDbg
在Windows或Console
OS X 上捕获这些消息。
开源的ZeroBrane Studio Lua IDE 是最新的开发。您可以使用它而不是其他文本编辑器,但真正的酷处是可以将其附加到正在运行的插件上,从而可以在运行时对其进行调试。我已经尝试过了,它确实有助于减少修复/重新加载/重新启动调试周期的时间。
我可以编写脚本轻松执行上面描述的任务吗?
我不认为仅使用Lightroom SDK就能100%完成任何一项任务,但是它可以为您完成很多工作。
在每个堆栈中选择带有JPG扩展名的文件,并将其置于堆栈顶部
这是一些类似Lua的代码,几乎可以带您到达那里:
for photo in catalog:getMultipleSelectedOrAllPhotos() do
for peer in photo:stackInFolderMembers() do
if string.find('%.jpg$', peer:getFormattedMetadata('fileName')) then
-- *mumble* move 'peer' photo to top of stack *mumble*
break
end
end
end
不幸的是,至少在LR 5上,我没有看到SDK中执行此最深注释行的方法。我能想到的最好的方法是致电catalog:setSelectedPhotos(peer)
,然后将其留给用户以实际单击数字徽章来重新排序堆栈。
将元数据从(现有)RAW文件批量复制到(现有)JPEG文件
您可以使用现有的SDK进行某些操作,但是存在一些限制。
例如,虽然您可以读取 EXIF dateTimeOriginal
字段的值,但SDK本身没有设置该值的功能。我认为这是因为Lightroom开发人员认为不应以编程方式对此进行更改,因为它是来自相机的宝贵信息。(为什么在我不知道“元数据”>“编辑捕获时间...”菜单项的情况下会出现这种情况,但那里却有它。)
但是,每当SDK试图利用这些限制之一来困住您时,通常都会有一个逃生门。例如,您可以安装ExifTool并从Lua调用它。这不是一个完美的解决方案,因为目录元数据和照片元数据之间会不一致,但是Lightroom会注意到并在照片上贴了徽章,单击该徽章后,您可以通过从照片中重新加载元数据来解决冲突。
(使用此类插件时,您需要在“目录设置”对话框中设置“自动将更改写入XMP”选项。否则,可以更轻松地创建双向冲突,其中目录和照片元数据都具有Lightroom不知道如何合并两组元数据;它使您选择其中一个,并用它覆盖另一个元数据副本。