Photoshop UXP Action類の上級者向け操作02

UXP

前回よりPhotoshop UXPからアクション関係の操作を行ないます。前回記録ボタンのオン、オフとアクティブなアクションの取得に成功しました。

コマンドの内容の取得

今回コマンドの内容の取得です。前々回の記事でもコマンドの数とコマンドの名前は取得できました。ただコマンドの中身、例えばトーンカーブの調整レイヤーを作成するアクションならトーンカーブの各種数値の設定は取得できませんでした。

アクションコマンドの取得できる箇所とできない箇所
アクションのコマンドの部分

でもこういったようなトーンカーブのアクションを取得してその中身のオプション、補正の内容も取得した場合が出てくる場合もあります。どうにかアクティブなアクションから取得できないでしょうか。

JavaScriptとしてコピー

過去の記事で取り上げたようにPhotoshopのアクションパネルにはアクティブなアクションからUXP用のアクションの内容をbatchPlayのコードとしてコピーする機能です。コピーした内容はクリップボードにコピーされます。これの内容はトーンカーブの場合以下のようになります。

JSON形式だったらよかったのにという感じもありますが何はともあれ調整レイヤーのパラメータの類も含めて取得できます。アクションの内容でオブジェクトのプロパティが変わるので取得のやり方はやや面倒かもしれませんが中身は確認できます。メニューの実行のやり方などは前回の記事で解説していますので実現は可能ですね。というわけでおおよそ以下のようなコードになりました。

新規アクションの作成

Action Recordingでもそうですが既存のアクションではなく新規のアクションにアクションの内容を登録させたいことがあります。しかしこの新規アクションの操作、そのまま実行するとAlchemistでもメニューから実行するコマンドしか取得できず、前回の記事のようにperformMenuCommandメソッドを使ってアクション作成の処理自体は実行できるのですがアクション名を入力するウインドウが立ち上がって一々ユーザーに操作を強制させてしまいます。

アクション名記入
モーダルウインドウが立ち上がって入力を強制される

これに限らずperformMenuCommandメソッドからのメニューコマンド実行は本来こういったウインドウに値を入力後に実行するような処理はUXPからの実行でも強制されます。値を渡してそのまま実行とはいかないようです。ここでまた大きな壁にぶつかってしまいました。どうにかコードから値を渡してユーザーに操作をさせずにそのまま作成まで行いたいです。

アクションの内容からbatchPlayを取得

先ほどやった通りPhotoshopはUXPアクションの内容をbatchPlayの内容として取得できます。そして新規アクションの作成もアクションとして登録できます。つまり一度アクション作成のアクションを作成して(紛らわしい)そこからコードをコピーします。ここから取得したコードは先ほどのperformMenuCommandメソッドと違いbatchPlayなのでしっかり値を渡す項目があってそのままダイアログを通さずにアクションの作成まで進めます。

アクション作成のコマンド

ここからアクションパネルからJavaScriptとしてコピーを選びます。その結果が以下のコード。

これでコードから直接アクションを作成できるようになります。ダイアログにアクション名など一々ユーザーに打たせる必要もありません。

というわけで今回は

  • コマンドの内容の取得
  • 新規アクションの作成

ができました。
次回さらに続きます。

Beer 寄付してサイトを応援する。