Lightroom SDK 6.0 でプラグインの勉強中です。選択中の写真リストに対して処理をしたくてLrCatalogにgetTargetPhotosとgetMultipleSelectedOrAllPhotosがあると知りました。

その違いについてメモしておきます。

写真1枚を選択しているとき

getTargetPhotosは選択中の1枚の写真を返します。一方getMultipleSelectedOrAllPhotosはカタログで表示中の全ての写真を返します。

写真0枚を選択している時

写真を選択していない場合は、getTargetPhotosもgetMultipleSelectedOrAllPhotosもカタログで表示中の全ての写真を返しました。

写真を複数枚選択している場合

getTargetPhotosもgetMultipleSelectedOrAllPhotosも選択中の写真を返しました。

選択している写真を取得したい場合

写真未選択だとカタログで表示中の全ての写真を返してしまうため、getTargetPhotosを使っても純粋に選択した写真・・・というわけにはいかない様です。

ただ、getTargetPhotosではなくgetTargetPhotoを使えば、複数の写真を選択している時は代表の1枚しか返してくれないものの、未選択の時にはnilを返してくれます。

だから純粋に選択している写真を返して欲しいなら、以下のコードでできます。

local LrApplication = import 'LrApplication'
local LrDialogs = import 'LrDialogs'

import "LrTasks".startAsyncTask(
    function()
        local catalog = LrApplication.activeCatalog()

        -- ライブラリで明示的に写真が選択されていない場合は処理を抜ける
        local photo = catalog:getTargetPhoto()
        if ( not photo ) then
            LrDialogs.message ("写真が選択されていません。")
            return
        end
        
        -- 選択されている写真の情報をメッセージ表示
        local selectionPhotos = catalog:getTargetPhotos()
        
        for idx, photo in pairs(selectionPhotos) do
            LrDialogs.message (idx .. ':' .. photo:getFormattedMetadata("fileName"))
        end
    end
)

選択した順序で取得して欲しいのですが、写真は並んだ順番ですね。

なにしろLightroom SDK 歴が浅いもので・・・。これが正しい書き方なのか、選択順に取得する方法がないものか模索中です。


コメントを残す

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