Nic nie zrobiłem z Luą
Lua jest prawdopodobnie najprostszym, najczystszym językiem programowania, jaki znam. (I znam kilka .)
Prostota Lui jest także jej największą słabością: będąc małym, czystym językiem z założenia, nie ma w nim wielu rzeczy, których można się spodziewać, gdy pochodzić z języka klasy przemysłowej, takiego jak Java, lub baterii - zawiera język taki jak Python.
Lua została zaprojektowana do rozszerzenia o C, co w tym przypadku oznacza SDK Lightrooma. To świetnie, jeśli Adobe wykonał pracę, aby zapewnić potrzebne narzędzia, które nie są wbudowane w Luę, ale od czasu do czasu prawdopodobnie będziesz wzywał zewnętrzne narzędzia, aby załatwić sprawę.
Czy interfejs API Lightroom jest łatwy do podłączenia?
Jedyną trudną częścią tego jest to, że musisz ustrukturyzować kod źródłowy w określony sposób i zapewnić specjalny Info.lua
plik, aby poinformować Lightroom o swojej wtyczce. Wszystko to wyjaśniono w dokumentacji SDK . Zestaw SDK zawiera kilka funkcjonujących wtyczek na początek, w tym dość rozbudowaną wtyczkę „hello world”, którą można wyczyścić pod kątem przydatnego kodu początkowego.
czy wymaga specjalistycznych narzędzi do programowania?
Możesz sobie poradzić tylko za pomocą edytora tekstu.
W programie Lightroom nie ma wbudowanej funkcji debugowania , ale w pakiecie SDK dostępna jest funkcja rejestrowania debugowania . Możesz złapać te wiadomości w WinDbg
systemie Windows lub Console
OS X.
Nowszym rozwiązaniem jest open source ZeroBrane Studio Lua IDE. Możesz użyć tego zamiast innego edytora tekstu, ale naprawdę fajne jest to, że można dołączyć go do działającej wtyczki, która pozwala debugować ją podczas działania. Próbowałem tego i pomaga to skrócić czas cyklu usuwania / przeładowywania / restartowania.
Czy mogę pisać skrypty w celu łatwego wykonywania wyżej opisanych zadań?
Nie sądzę, aby którekolwiek z tych zadań było w 100% wykonalne przy użyciu tylko zestawu SDK Lightroom, ale może dla ciebie zrobić wiele pracy.
wybierz plik na każdym stosie z rozszerzeniem JPG i ustaw go na szczycie stosu
Oto trochę niejasny kod podobny do Lua, który doprowadzi Cię prawie do samego końca:
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
Niestety nie widzę w SDK sposobu na wykonanie tej najbardziej wewnętrznej akcji linii komentarza, przynajmniej od LR 5. Najlepsze, co mogę wymyślić, to zadzwonić catalog:setSelectedPhotos(peer)
, a następnie pozostawić użytkownikowi kliknięcie znaczka numeru, aby zmienić kolejność stosu.
Wykonaj masową kopię metadanych z (istniejącego) pliku RAW do (istniejącego) pliku JPEG
Możesz to zrobić za pomocą istniejącego zestawu SDK, ale istnieją ograniczenia.
Na przykład, chociaż można odczytać wartość dateTimeOriginal
pola EXIF , w samym zestawie SDK nie ma możliwości ustawienia wartości. Zakładam, że dzieje się tak, ponieważ programiści Lightroom zdecydowali, że nie należy tego nigdy zmieniać programowo, ponieważ jest to cenna informacja z kamery. (Dlaczego miałoby tak być, gdy jest element menu Metadane> Edytuj czas przechwytywania ... nie wiem, ale masz go.)
Ale ilekroć SDK próbuje złapać Cię w jedno z tych ograniczeń, często pojawia się właz ewakuacyjny. Możesz na przykład zainstalować ExifTool i wywołać go z Lua. To nie jest idealne rozwiązanie, ponieważ masz wtedy niespójność między metadanymi katalogu i metadanymi zdjęcia, ale Lightroom zauważy i umieści znaczek na zdjęciu, który po kliknięciu pozwoli rozwiązać konflikt, ponownie ładując metadane ze zdjęcia.
(Podczas korzystania z takiej wtyczki będziesz chciał ustawić opcję „Automatycznie zapisuj zmiany w XMP” w oknie dialogowym Ustawienia katalogu. W przeciwnym razie ułatwisz utworzenie dwukierunkowego konfliktu, w którym metadane katalogu i zdjęcia mają zmienione. Lightroom nie wie, jak scalić dwa zestawy metadanych; sprawia, że wybierasz jeden, i zastępuje nim drugą kopię metadanych).