Amazonで商品を見るセール会場へ

Photoshopスクリプト(jsx)│Action Managerの読み方|executeAction・charIDToTypeID・stringIDToTypeID

Action Manager は、ExtendScript(.jsx)から、DOM で書けない Photoshop の操作を実行する仕組みです。

ScriptingListener で記録したコードは、この Action Manager の書き方で出てきます。

  • 記録できる操作なら、Action Manager で実行できる(ほかの会社のフィルターも)
  • executeAction(イベントID, 記述子, ダイアログの扱い) で実行する
  • charIDToTypeID は4文字のコード、stringIDToTypeID は文字列の名前を、実行時の ID に変える
  • DialogModes.NO でダイアログを出さずに実行する

この記事は、Adobe の Photoshop Scripting Guide と JavaScript Reference(公開されている最新の2020年版)にもとづいています。

当方には Photoshop が無いため、実行の再現は含まず、画面の名前は英語版の表記です。

目次

ScriptingListenerで記録する

ScriptListener のプラグイン(ScriptListener.8li)を Photoshop の Plug-Ins フォルダーに置いて再起動すると、画面の操作がコードとして記録されます。

記録はデスクトップの ScriptingListenerJS.log(JavaScript)と ScriptingListenerVB.log(VBScript、Windows だけ)に出ます。

入れたままだとログが大きくなり Photoshop も遅くなるので、コードを取るときだけ入れるよう、ガイドに書かれています。

入れ方は、ScriptingListenerの使い方で紹介しています。

記録されたコードを読む

公式ガイドの、エンボスのフィルターを記録した例です。

var id19 = charIDToTypeID( "Embs" );
var desc4 = new ActionDescriptor();
var id20 = charIDToTypeID( "Angl" );
desc4.putInteger( id20, 135 );
var id21 = charIDToTypeID( "Hght" );
desc4.putInteger( id21, 3 );
var id22 = charIDToTypeID( "Amnt" );
desc4.putInteger( id22, 100 );
executeAction( id19, desc4 ,DialogModes.NO);
行意味
charIDToTypeID( “Embs” )エンボスのイベントの ID
new ActionDescriptor()設定の値を入れる入れ物
desc4.putInteger( 角度の ID, 135 )角度を135にする
desc4.putInteger( 高さの ID, 3 )高さを3にする
desc4.putInteger( 量の ID, 100 )量を100にする
executeAction( イベント, 記述子, DialogModes.NO )ダイアログを出さずに実行する

charIDToTypeIDとstringIDToTypeID

関数変えるもの
charIDToTypeID4文字のコード(”Embs” など)→ 実行時の ID
stringIDToTypeID文字列の名前(”pixelScaleFactor” など)→ 実行時の ID
typeIDToCharID実行時の ID → 4文字のコード
typeIDToStringID実行時の ID → 文字列の名前
Photoshop JavaScript Reference(2020年版)をもとに作成

ScriptingListener の記録には、両方が混ざって出てきます。

意味を調べたいときは、typeIDToStringID で文字列の名前に変えると、読みやすくなります。

alert( typeIDToStringID( charIDToTypeID( "Embs" ) ) );

上の1行は、4文字のコードを文字列の名前に変えて表示する書き方の例です(当方では Photoshop が無いため、表示される名前は確かめていません)。

Action Managerの入れ物

オブジェクト役割
ActionDescriptor名前と値の組を入れる(設定の値)
ActionList値の並び
ActionReference対象(レイヤーや書類)を指す

値を取り出すときは、executeActionGet(ActionReference) で ActionDescriptor を受け取ります。

これらは AppleScript からは使えません。

関数にするコツ

  • id19 のような番号の変数は、意味の分かる名前に変える
  • 135 や 3 のような値を、関数の引数にする
  • DialogModes.NO を DialogModes.ALL にすると、ダイアログを出して値を選ばせられる
function emboss(angle, height, amount) {
    var desc = new ActionDescriptor();
    desc.putInteger(charIDToTypeID("Angl"), angle);
    desc.putInteger(charIDToTypeID("Hght"), height);
    desc.putInteger(charIDToTypeID("Amnt"), amount);
    executeAction(charIDToTypeID("Embs"), desc, DialogModes.NO);
}
emboss(135, 3, 100);

公式ガイドの同じ章の関数にした例は、desc4 と desc7 が混ざる誤記があり、そのまま写すと動きません。

スマートオブジェクトの中身の置き換え

スマートオブジェクトの「Replace Contents」も、記録すれば Action Manager で実行できる操作です。

Adobe の C++ SDK の用語表には placedLayerReplaceContents という名前がありますが、Scripting Guide には書き方の例がありません。

使うときは、ScriptingListener で実際に記録してコードを取るのが確実です。

UXPへの移行

UXP では、Action Manager の代わりに batchPlay を使います。

書き方は、PhotoshopのbatchPlayの使い方で紹介しています。

まとめ

  • Action Manager は、記録できる操作を ExtendScript から実行する仕組み
  • executeAction(イベント, ActionDescriptor, DialogModes.NO) の形
  • charIDToTypeID は4文字、stringIDToTypeID は文字列の名前
  • 変数名と値を整理して関数にすると使い回せる

参考:Adobe「Photoshop Scripting Guide」「Photoshop JavaScript Reference」(2020年版)。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

Photoshopのおすすめ書籍

動作要件とPCの確認項目

周辺機器の優先度

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次