Lightroom SDKのコーディングに初挑戦3日目です。 Lua言語をマニュアルやウェブの見よう見まねで、『ライブラリの中からレート3以上の写真を見つけ出し、そこに埋め込まれたメタデータのうち、タイトルと説明をメッセージダイアログでポップアップする』というスクリプトを書いてみました。

Lightroomのプラグインとしては何の役にも立たない、Lightroom SDK & Lua 学習用プラグインです。

さて、書いたコードが合っているのか、詳しく調べていきたいと思います。

初めて動くコードを書きました。

以下のコードを書きました。ブログだと変なところで折り返してしまって見づらいですが・・・

local LrDialogs = import 'LrDialogs'

import "LrTasks".startAsyncTask(
    function()
    
        local catalog = import "LrApplication".activeCatalog()
        local photos = catalog:findPhotos {
            searchDesc = {
                criteria = "rating",
                operation = ">",
                value = 3,
            },
        }
    
        for _, photo in ipairs( photos ) do
		    local fileName = photo:getFormattedMetadata("fileName")
		    local photoTitle = photo:getFormattedMetadata("title")
		    local photoCaption = photo:getFormattedMetadata("caption")
	        LrDialogs.message ("【" .. photoTitle .. "】\n" .. photoCaption)
        end
        
    end
)

local と import

まずは1行目のコードです。

local LrDialogs = import 'LrDialogs'

local は Lua言語でローカル変数を定義する際に使用するそうです。今回は LrDialogs という名前のローカル変数を定義しています。Luaではローカル変数とグローバル変数、テーブルフィールドという3種類の変数が定義できるとのことですが、ローカル変数を使うと有効範囲は定義したブロックだけに限定されてしまいますが、パフォーマンスもよく、メモリ効率も良くなるそうです。

importは・・・Google検索したのですがいまいち手がかりが得られません。ただ、Lightroom SDK で用意された名前空間を読み込むために使うというのは、Lightroom SDK のドキュメントから確実です。LrDialogsというダイアログを利用できる様にする API の名前空間を使用することを明示しています。

このコードにより、今後 LrDialogs というローカル変数を介して LrDialogs API にアクセスできる様になります。

Task

続いては import “LrTasks”.startAsyncTask( 〜 ) の文です。import は上で出てきました。Lightroom SDK の LrTasks 名前空間を読み込んで、それをローカル変数に入れること無く直接startAsyncTask関数を呼び出しています。

startAsyncTask関数はメインスレッド内でバックグラウンドタスクとしてカッコ内に書いた処理を実行する様です。

この後で出てくるカタログ内を検索するfindPhotos関数を使用するにはバックグラウンドタスク内で実行しなければならないと、Lightroom SDK マニュアルに書かれていました。

startAsyncTask は 次の機会へ

長くなってきたので今回はここまで。

startAsyncTask内に書いたコードの検証と考察は別記事で書こうと思います。


「Lightroom SDK Luaでレート3以上の写真のタイトルと説明をポップアップするスクリプトを書いてみました①」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です