Я ничего не сделал с Луа
Lua , наверное, самый простой и чистый язык программирования, который я знаю. (И я знаю несколько .)
Простота Lua также является его самой большой слабостью: будучи маленьким, чистым языком по своему дизайну, в нем не так много встроенных вещей, которые вы ожидаете найти, когда исходите из языка промышленного уровня, такого как Java, или аккумуляторов. включенный язык, как Python.
Lua разработан для расширения на C, что в данном случае означает SDK Lightroom. Прекрасно, если Adobe выполнила работу по предоставлению необходимых инструментов, которые не встроены в Lua, но время от времени вы, вероятно, будете обращаться к внешним инструментам, чтобы добиться своей цели.
Легко ли подключить Lightroom API?
Единственная сложность в том, что вам нужно структурировать исходный код определенным образом и предоставить специальный Info.lua
файл, чтобы сообщить Lightroom о вашем плагине. Все это объясняется в документации по SDK . SDK включает в себя несколько функционирующих плагинов, в том числе довольно сложный плагин «hello world», который можно очистить для получения полезного стартового кода.
это требует каких-либо специализированных инструментов для разработки?
Вы можете обойтись только с помощью текстового редактора.
В Lightroom нет встроенного средства отладки, но в SDK есть средство ведения журнала отладки . Вы можете поймать эти сообщения в WinDbg
Windows или Console
OS X.
Более свежей разработкой является ZeroBrane Studio с открытым исходным кодом Lua IDE. Вы можете использовать это вместо другого текстового редактора, но действительно круто то, что его можно подключить к работающему плагину, который позволяет отлаживать его во время работы. Я пробовал это, и это помогает сократить время цикла отладки исправления / перезагрузки / перезапуска.
Могу ли я написать сценарии для выполнения задач, которые я легко описал выше?
Я не думаю, что любая из этих задач на 100% выполнима с использованием только Lightroom SDK, но она может сделать большую часть работы за вас.
выберите файл в каждом стеке с расширением 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
К сожалению, я не вижу способа в SDK выполнить действие этой самой внутренней строки комментария, по крайней мере, с LR 5. Лучшее, что я могу придумать, - это позвонить catalog:setSelectedPhotos(peer)
, а затем предоставить пользователю возможность фактически щелкнуть значок с номером, чтобы изменить порядок в стеке.
Выполните массовое копирование метаданных из (существующего) файла RAW в (существующий) файл JPEG
Вы можете сделать это с помощью существующего SDK, но есть ограничения.
Например, хотя вы можете прочитать значение поля EXIF dateTimeOriginal
, в самом SDK нет возможности установить это значение. Я предполагаю, что это потому, что разработчики Lightroom решили, что это никогда не должно изменяться программно, что это ценная информация с камеры. (Почему так должно быть, когда есть пункт меню «Метаданные> Изменить время захвата ...», которого я не знаю, но он у вас есть.)
Но всякий раз, когда SDK пытается поймать вас в ловушку с одним из этих ограничений, часто есть запасной люк. Вы можете установить ExifTool и вызвать его, например, из Lua. Это не идеальное решение, потому что тогда у вас есть несоответствие между метаданными каталога и метаданными фотографии, но Lightroom заметит и поставит значок на фотографии, который при нажатии позволит вам разрешить конфликт путем перезагрузки метаданных из фотографии.
(При использовании такого плагина вы захотите установить параметр «Автоматически записывать изменения в XMP» в диалоговом окне «Параметры каталога». В противном случае вам будет проще создать двусторонний конфликт, в котором метаданные каталога и фотографии имеют Lightroom не знает, как объединить два набора метаданных, он заставляет вас выбрать один и перезаписывает другую копию метаданных.)