Non ho fatto niente con Lua
Lua è probabilmente il linguaggio di programmazione più semplice e pulito che conosca. (E ne conosco alcuni .)
La semplicità di Lua è anche la sua più grande debolezza: essendo un linguaggio piccolo e pulito in base alla progettazione, non ha molte cose integrate che ti aspetteresti di trovare quando provieni da un linguaggio di livello industriale come Java o una batteria -incluso linguaggio come Python.
Lua è progettato per essere esteso da C, che in questo caso significa SDK di Lightroom. È fantastico se Adobe ha fatto il lavoro per fornire gli strumenti di cui hai bisogno che non sono integrati in Lua, ma ogni tanto probabilmente ti ritroverai a chiamare strumenti esterni per fare le cose.
L'API di Lightroom è facile da collegare
L'unica parte difficile è che devi strutturare il tuo codice sorgente in un modo particolare e fornire un Info.lua
file speciale per dire a Lightroom del tuo plugin. È tutto spiegato nei documenti SDK . L'SDK include diversi plug-in funzionanti da cui iniziare, incluso un plug-in "ciao mondo" abbastanza elaborato che può essere ricercato per un utile codice di avvio.
richiede strumenti specializzati per lo sviluppo?
Puoi cavartela solo con un editor di testo.
In Lightroom non è integrata alcuna funzione di debug, ma nell'SDK è presente una funzione di registrazione del debug . Puoi catturare questi messaggi WinDbg
su Windows o Console
su OS X.
Uno sviluppo più recente è l' IDE open source ZeroBrane Studio Lua. Puoi usarlo al posto di un altro editor di testo, ma il bello è che è possibile collegarlo al tuo plugin in esecuzione che ti consente di eseguire il debug mentre viene eseguito. Ho provato questo, e aiuta a ridurre il tempo di ciclo di debug di correzione / ricarica / riavvio.
Posso scrivere script per eseguire facilmente il tipo di attività che descrivo sopra?
Non credo che nessuna delle due attività sia fattibile al 100% usando solo Lightroom SDK, ma può fare molto del lavoro per te.
selezionare il file in ogni stack con l'estensione JPG e renderlo in cima allo stack
Ecco un po 'di codice vagamente simile a Lua per portarti quasi fin lì:
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
Sfortunatamente, non vedo un modo nell'SDK di eseguire l'azione più interna della linea di commento, almeno a partire da LR 5. Il meglio che posso trovare è chiamare catalog:setSelectedPhotos(peer)
, quindi lasciare all'utente di fare clic sul badge numerico per riordinare lo stack.
Esegue una copia di massa di metadati da un file RAW (esistente) a un file JPEG (esistente)
È possibile eseguire alcune operazioni con l'SDK esistente, ma esistono delle limitazioni.
Ad esempio, mentre è possibile leggere il valore del dateTimeOriginal
campo EXIF , nell'SDK stesso non è possibile impostare il valore. Suppongo che ciò sia dovuto al fatto che gli sviluppatori di Lightroom hanno deciso che non dovrebbe mai essere modificato a livello di codice, che si tratta di informazioni preziose fornite dalla fotocamera. (Perché dovrebbe essere così quando ci sono Metadata> Modifica tempo di acquisizione ... voce di menu che non conosco, ma il gioco è fatto.)
Ma, ogni volta che l'SDK tenta di intrappolarti con una di queste limitazioni, c'è spesso un tratteggio di fuga. Ad esempio, è possibile installare ExifTool e richiamarlo da Lua. Questa non è una soluzione perfetta, perché hai un'incongruenza tra i metadati del catalogo e i metadati della foto, ma Lightroom noterà e metterà un badge sulla foto, che quando si fa clic ti consentirà di risolvere il conflitto ricaricando i metadati dalla foto.
(Ti consigliamo di avere l'opzione "Scrivi automaticamente le modifiche in XMP" impostata nella finestra di dialogo Impostazioni catalogo quando usi un tale plug-in. Altrimenti, rendi più semplice creare un conflitto a doppio senso, dove sia il catalogo che i metadati delle foto hanno è cambiato. Lightroom non sa come unire i due set di metadati; ti fa scegliere uno e sovrascrive gli altri metadati con esso.)