Photoshopのスクリプトが書けなくてもScriptingListenerがあれば大丈夫

js_log_topimage

「自分でPhotoshopのスクリプトを書かなくても、勝手にスクリプトが出来てくれれば良いのに」

そのような思いを実現してくれそうなPhotoshopのプラグインがあります。

それもアドビシステムズが無料で用意してくれています。

それが ScriptingListener プラグイン

何が出来るのかを要約すると

Photoshopで操作した事を、ログファイルで出力してくれる

そのような機能です。

それだけなのですが、大事な部分はその出力されたログはJavaScript とVBScriptのスクリプト言語で記述されている事。

つまりその書かれているスクリプトを使えば、一からスクリプトを書かなくてもコピー・ペーストするだけで、Photoshopを操作できてしまいます。

そんなアドビシステムズが用意しているScriptingListener プラグインを紹介したいと思います。


ScriptingListenerをインストール

ScriptingListener プラグインをインストールします。

PhotoshopCSの頃まではPhotoshopをインストールしたら一緒にこのプラグインも入っていましたが、PhotoshopCCではダウンロードしないと入ってないみたいなのでダウンロードします。

アドビシステムズの公式ページからダウンロード出来ます。
https://helpx.adobe.com/jp/photoshop/kb/downloadable-plugins-and-content.html


ScriptingListener プラグインの項目にMacOS版 Windows版の両方があるので環境に合わせてどちらかをダウンロードします。

Windows版をダウンロードしました。

plug-in-zipファイル

ダウンロードしたZipファイルを解凍します。
解答すると32bit版と64bit版のフォルダがありました。 

Scripting_win_folder


64bit版のScripting_Win64 をを開きます。

フォルダが3個ありました。

scripting_folder_in

Scripting Utilities のフォルダを開きます。

scriptiListener_8li

ScriptListener.8liがありました。これでスクリプトのログを出力してくれます。

一応ほかのフォルダも見ておきましょう。

Sample Scriptsを開きます。

[ApplleScript] [JavaScript] [VBScript]
Photoshopに対応した3種類のスクリプトのサンプルが入ってます。

他のフォルダ

JavaScriptのサンプルだけでも大量のスクリプトが入ってます。
ファイル名を見ただけでも興味深くて、勉強になりそう。

このサンプルを目的に ScriptListener をダウンロードしても良いと思います。

サンプルスクリプト

Photoshopを操作してScriptListenerからログを出力

それではScriptListener.8liを使って、ログを出力しましょう。

まずはじめに、PhotoShopが開いていたら終了します。

終了したら ScriptListener.8li が入っていたフォルダ Scripting Utilities ごと

C:\Program Files\Adobe\Adobe Photoshop 2020\Plug-ins

の下に置きます

これで準備完了です。

ココからPhotoshopを操作してScriptListener.8liからログを出力します。

Photoshopを起動します。

Photoshopが開いたら、


新規ファイルを開きます。

画像を赤く塗りつぶします。

フィルター > 描画 > 雲模様1 から雲模様1のフィルターをかけます

ファイルを閉じます。


Photoshopを終了します。

デスクトップに
2つのログファイルが出来てます。

一つはJavaScript もう一つはVBScript で記述されてます。

js_log_file  VB_log_file

C:\Program Files\Adobe\Adobe Photoshop 2020\Plug-ins に 
Scripting Utilitiesフォルダを置いたままだと、ずっとログが出力されつづけるので他のフォルダに移しておきましょう

ScriptListenerから出力されたログでPhotoshopを操作する

JavaScriptで出力されたログファイル ScriptingListenerJS.log をテキストエディタで開きます。

var idMk = charIDToTypeID( “Mk  ” );
と書かれているところが新規ファイル作成ですコピーします。

新規ファイル作成


var idFl = charIDToTypeID( “Fl  ” );
と書かれているところが塗りつぶしですコピーします。

塗りつぶし

var idClds = charIDToTypeID( “Clds” );
と書かれているところがフィルターの雲模様1ですコピーします。

雲模様1


var idCls = charIDToTypeID( “Cls ” );
と書かれているところが「ファイルを閉じる」ですが今回はコピーしません

該当範囲をコピーしてスクリプトにペーストします
コピー・ペースト以外に他に何も書きません。

js_log_test.jsx で保存しました。

C:\Program Files\Adobe\Adobe Photoshop 2020\Presets\Scripts
に保存します。


var idMk = charIDToTypeID( "Mk  " );
    var desc9 = new ActionDescriptor();
    var idNw = charIDToTypeID( "Nw  " );
        var desc10 = new ActionDescriptor();
        var idartboard = stringIDToTypeID( "artboard" );
        desc10.putBoolean( idartboard, false );
        var idautoPromoteBackgroundLayer = stringIDToTypeID( "autoPromoteBackgroundLayer" );
        desc10.putBoolean( idautoPromoteBackgroundLayer, false );
        var idMd = charIDToTypeID( "Md  " );
        var idRGBM = charIDToTypeID( "RGBM" );
        desc10.putClass( idMd, idRGBM );
        var idWdth = charIDToTypeID( "Wdth" );
        var idRlt = charIDToTypeID( "#Rlt" );
        desc10.putUnitDouble( idWdth, idRlt, 320.000000 );
        var idHght = charIDToTypeID( "Hght" );
        var idRlt = charIDToTypeID( "#Rlt" );
        desc10.putUnitDouble( idHght, idRlt, 239.999985 );
        var idRslt = charIDToTypeID( "Rslt" );
        var idRsl = charIDToTypeID( "#Rsl" );
        desc10.putUnitDouble( idRslt, idRsl, 72.000000 );
        var idpixelScaleFactor = stringIDToTypeID( "pixelScaleFactor" );
        desc10.putDouble( idpixelScaleFactor, 1.000000 );
        var idFl = charIDToTypeID( "Fl  " );
        var idFl = charIDToTypeID( "Fl  " );
        var idWht = charIDToTypeID( "Wht " );
        desc10.putEnumerated( idFl, idFl, idWht );
        var idDpth = charIDToTypeID( "Dpth" );
        desc10.putInteger( idDpth, 8 );
        var idprofile = stringIDToTypeID( "profile" );
        desc10.putString( idprofile, """sRGB IEC61966-2.1""" );
        var idGdes = charIDToTypeID( "Gdes" );
            var list1 = new ActionList();
        desc10.putList( idGdes, list1 );
    var idDcmn = charIDToTypeID( "Dcmn" );
    desc9.putObject( idNw, idDcmn, desc10 );
    var idDocI = charIDToTypeID( "DocI" );
    desc9.putInteger( idDocI, 385 );
executeAction( idMk, desc9, DialogModes.NO );

// =======================================================
var idFl = charIDToTypeID( "Fl  " );
    var desc15 = new ActionDescriptor();
    var idUsng = charIDToTypeID( "Usng" );
    var idFlCn = charIDToTypeID( "FlCn" );
    var idFrgC = charIDToTypeID( "FrgC" );
    desc15.putEnumerated( idUsng, idFlCn, idFrgC );
    var idOpct = charIDToTypeID( "Opct" );
    var idPrc = charIDToTypeID( "#Prc" );
    desc15.putUnitDouble( idOpct, idPrc, 100.000000 );
    var idMd = charIDToTypeID( "Md  " );
    var idBlnM = charIDToTypeID( "BlnM" );
    var idNrml = charIDToTypeID( "Nrml" );
    desc15.putEnumerated( idMd, idBlnM, idNrml );
executeAction( idFl, desc15, DialogModes.NO );

// =======================================================
var idClds = charIDToTypeID( "Clds" );
    var desc20 = new ActionDescriptor();
executeAction( idClds, desc20, DialogModes.NO );

それでは実行してみましょう。

Photoshopを起動します。
ファイル > スクリプト から js_log_test を選択

実行アニメGif
新規ファイルを開く

画像を赤く塗りつぶす

雲模様1のフィルター

先程のログファイルを出力した時と同じ操作をしました。
これで出力されたログをコピー・ペーストすれば、Photoshopを動かせる事が確認できました。

おわりに

Photoshopはスクリプトでいろいろな事が出来ますが、Photoshop固有のコマンドがわからないとjavaScript や VBScript などのスクリプトを理解できても動かすことは出来ません。

Photoshopにプラグインを入れて標準機能にはない特殊なフィルターを使ったり、特殊な専用ファイル形式で保存したりそのような場合は、スクリプトのコマンドが分からないので、スクリプトを何も書けなくなってしまいます。

そんな時に今回紹介した ScriptListener でログを出力してスクリプト内にコピー・ペーストすれば、コマンドが分らなくてもスクリプトを書けてしまいます。

PhotoShopのスクリプトを書いてみようと思われたら、ScriptListener をダウンロードすることをオススメします。