Photoshopでスクリプトを作りたいので、操作を書き出す準備をします

しばらく前にPhotoshopの作業自動化のための事前調査を行いました。

その際にわかったことが下記になります。

  • 複雑な作業はPhotoshopのスクリプトを作る
  • PhotoshopのスクリプトはJavaで書くことができる
  • PhotoshopのアクションをJavaとして書き出すことができる

今回はPhotoshop上での操作を書き出すために、 Adobeの公式スクリプト「Scripting Listener」を準備したいと思います。


以下の説明は著者の作業環境をベースに説明しています。

  • Windows 10 64bit
  • Adobe Photoshop cc 2020

Scripting Listenerプラグインのインストール


上記のサイトにアクセスします。
画面の右手に目次があるので、「Scripting Listenerプラグイン」をクリックします。

Scripting Listenerプラグインをインストールする
Scripting Listenerプラグインをインストールする

インストールと言ってもファイルをフォルダへコピーするだけですので、画面の指示に従ってファイルをコピーします。


インストールが終わったらPhotoshopを開き、なにか適当な操作を行います。
※ レイヤーの追加を行ってみましょうか。

操作が終わったらPhotoshopを終了します。
すると、デスクトップに「.log」ファイルが2つ作られています。

Scripting Listener プラグインのVBスクリプト形式ログ
Scripting Listener プラグインのVBスクリプト形式ログ
Scripting Listener プラグインのJAVAスクリプト形式ログ
Scripting Listener プラグインのJavaスクリプト形式ログ

VBスクリプトで書くこともできるようなので、Windowsではこちらの方が拡張性はありそうです。(バッチファイル関連などではVBスクリプトでの操作もよく登場します)ただ、事前調査の感触ではネット上の記事はJavaスクリプトで載っていることが多そうだったので、そちらのロゴを使っていきたいと思います。


「.log」ファイルはテキストファイルですので、メモ帳などで中を確認することができます。ただ、Scripting Listenerプラグインをインストールしただけでは、Photoshopの起動から終了までの処理がすべて記載されます

この状態では参考にしたい処理を探すにも、ログ内容が長大なため混乱してしまいます

すべての操作ログが表示されてしまう
すべての操作ログが表示されてしまう

先のページには記載がないのですが、サンプルフォルダに入っているスクリプトを追加することでPhotoshop上から操作できるスイッチを作ることができます。


Scripting Listenerプラグインの動作を制御するスイッチを準備する

Scripting Listenerプラグインをインストールする時に解凍したフォルダを開きます。プラグインインストール時にコピーした「Scripting Utilities」フォルダと同じ階層に「Sample Scripts」があるので下記のようにたどります。

「Sample Scripts」フォルダをダブルクリック
「Sample Scripts」フォルダをダブルクリック
「JavaScript」フォルダをダブルクリック
「JavaScript」フォルダをダブルクリック
この2つがScripting Listenerプラグインのスイッチスクリプト
この2つがScripting Listenerプラグインのスイッチスクリプト

フォルダ内に「ScriptListenerOff.jsx」「 ScriptListenerOn.jsx 」があります。
※並びを変えていなければ下の方にあります。

ファイルを以下のフォルダへコピーします。

Program Files/Adobe/Adobe Photoshop CC 20**/Presets/Scripts

コピーが終わったら、Photoshopを起動して動きを確認してみましょう。


Scripting Listenerプラグインスイッチの動作を確認する

Photoshopで新規ファイルを作り、デスクトップのログファイルを削除します。
Scripting Listener プラグインの動作をONにします。

Scripting ListenerプラグインをONにする
Scripting ListenerプラグインをONにする

新規レイヤーを追加します。


Scripting Listenerプラグインの動作をOFFにします。

Scripting ListenerプラグインをOFFにする
Scripting ListenerプラグインをOFFにする

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

「新規レイヤー追加」だけのログ
「新規レイヤー追加」だけのログ

ファイル内のコードも最低限ですね。


ログファイルを任意の名前に変更し、拡張子を「.jsx」に変更すればスクリプトファイルとして動作します。先の「Presets」フォルダへ入れてPhotoshopを再起動すれば、スクリプトメニュー内にファイル名が表示されていると思います。

コードを実行すると下記のエラーが出ることがあります。

ログファイルをそのままjsxに変えて、実行すると出るエラー
ログファイルをそのままjsxに変えて、実行すると出るエラー

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スクリプト記述するという情報を得ていたので、もっとプログラミング言語的な記述で出てくると予想していたのです。

このあたりは、公式のドキュメントなどを読みながら、サンプルを作ってみたいと思います。



この断片があなたの星へ続く道を、少しでも照らすことを願って

投稿者: 0.1

イラストレーター/0.1up project著者 厚塗りで「存在感や重さ、質感による説得力」のあるイラストを目指しています。 日本では線画をベースとしたイラストが主流ですが、そこから外れたモノもイラストの世界を広げる為に必要だと考えています。「世界観にもう一味試したい」そんなときには、ぜひお声がけください。