Я ничего не делал с Луа
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» в диалоговом окне «Параметры каталога». В противном случае вам будет проще создать двусторонний конфликт, при котором оба каталога * Метаданные фотографий 1077 * и изменены. Lightroom не знает, как объединить два набора метаданных, он выбирает один и перезаписывает другую копию метаданных.)