しばらく前にPhotoshopの作業自動化のための事前調査を行いました。
その際にわかったことが下記になります。
- 複雑な作業はPhotoshopのスクリプトを作る
- PhotoshopのスクリプトはJavaで書くことができる
- PhotoshopのアクションをJavaとして書き出すことができる
今回はPhotoshop上での操作を書き出すために、 Adobeの公式スクリプト「Scripting Listener」を準備したいと思います。
以下の説明は著者の作業環境をベースに説明しています。
- Windows 10 64bit
- Adobe Photoshop cc 2020
目次:
Scripting Listenerプラグインのインストール
上記のサイトにアクセスします。
画面の右手に目次があるので、「Scripting Listenerプラグイン」をクリックします。

インストールと言ってもファイルをフォルダへコピーするだけですので、画面の指示に従ってファイルをコピーします。
インストールが終わったらPhotoshopを開き、なにか適当な操作を行います。
※ レイヤーの追加を行ってみましょうか。
操作が終わったらPhotoshopを終了します。
すると、デスクトップに「.log」ファイルが2つ作られています。


VBスクリプトで書くこともできるようなので、Windowsではこちらの方が拡張性はありそうです。(バッチファイル関連などではVBスクリプトでの操作もよく登場します)ただ、事前調査の感触ではネット上の記事はJavaスクリプトで載っていることが多そうだったので、そちらのログを使っていきたいと思います。
「.log」ファイルはテキストファイルですので、メモ帳などで中を確認することができます。ただ、Scripting Listenerプラグインをインストールしただけでは、Photoshopの起動から終了までの処理がすべて記載されます。
この状態では参考にしたい処理を探すにも、ログ内容が長大なため混乱してしまいます。

先のページには記載がないのですが、サンプルフォルダに入っているスクリプトを追加することでPhotoshop上から操作できるスイッチを作ることができます。
Scripting Listenerプラグインの動作を制御するスイッチを準備する
Scripting Listenerプラグインをインストールする時に解凍したフォルダを開きます。プラグインインストール時にコピーした「Scripting Utilities」フォルダと同じ階層に「Sample Scripts」があるので下記のようにたどります。



フォルダ内に「ScriptListenerOff.jsx」「 ScriptListenerOn.jsx 」があります。
※並びを変えていなければ下の方にあります。
ファイルを以下のフォルダへコピーします。
Windows:
c:/Program Files/Adobe/Adobe Photoshop CC 20**/Presets/Scripts
Mac OS:
/Applications/Adobe Photoshop 20**/Presets/Scripts
コピーが終わったら、Photoshopを起動して動きを確認してみましょう。
Scripting Listenerプラグインスイッチの動作を確認する
Photoshopで新規ファイルを作り、デスクトップのログファイルを削除します。
Scripting Listener プラグインの動作をONにします。

新規レイヤーを追加します。
Scripting Listenerプラグインの動作をOFFにします。

Photoshopを終了し、ログファイルを開いてみましょう。

ファイル内のコードも最低限ですね。
ログファイルを任意の名前に変更し、拡張子を「.jsx」に変更すればスクリプトファイルとして動作します。先の「Presets」フォルダへ入れてPhotoshopを再起動すれば、スクリプトメニュー内にファイル名が表示されていると思います。
コードを実行すると下記のエラーが出ることがあります。

Photoshopが独自のログコードを出力している操作らしいのですが、スクリプトファイルには不要なため、該当箇所を削除しましょう。
コードを削除しながら最低限必要なコードを探ったところ、赤く示した部分が新規レイヤー追加の処理の様です。

この様に必要なコードを切り出していけば、望む処理は作れそうですね。
一応、切り出したコードを載せておきます。
// ======================================================= var idMk = charIDToTypeID( "Mk " ); var desc8 = new ActionDescriptor(); var idnull = charIDToTypeID( "null" ); var ref1 = new ActionReference(); var idLyr = charIDToTypeID( "Lyr " ); ref1.putClass( idLyr ); desc8.putReference( idnull, ref1 ); var idLyrI = charIDToTypeID( "LyrI" ); desc8.putInteger( idLyrI, 2 ); executeAction( idMk, desc8, DialogModes.NO );
以上でPhotoshopの動作を書き出すための準備は終了になります。
追伸:
私はC言語系で産業分野の制御系のソフトを作っていました。その感覚からすると Scripting Listener プラグインで書き出されたものは、思っていたプログラミングコードとは随分と様子が違いました。
事前調査でもJavaスクリプト記述するという情報を得ていたので、もっとプログラミング言語的な記述で出てくると予想していたのです。
このあたりは、公式のドキュメントなどを読みながら、サンプルを作ってみたいと思います。
この断片があなたの星へ続く道を、少しでも照らすことを願って