操作を自動的に記録する

Photoshop 7からは、あるプラグインを使うと自動的に操作がJavaScriptで記録されます。そのプラグイン名は「ScriptingListener」でAdobe Systemsから提供されている純正プラグインです。Photoshop 7の場合はAdobeのウェブサイトからダウンロードしたPhotoshop Scripting Support、Photoshop CSの場合はスクリプティングガイドフォルダ内のユーティリティフォルダ内に入っています。このScriptingListenerプラグインをプラグインフォルダ内に入れます。入れた後にPhotoshopを起動します。
起動後の操作は全てJavaScriptで記録されます。MacOS Xではデスクトップに「ScriptingListenerJS.log」というファイル名で保存されます。このScriptingListenerJS.logはテキストファイルなのでテキストエディタで開けば、今までの操作がJavaScriptプログラムとして見る事ができます。全部または必要な部分のみをコピー&ペーストして使う事ができます。例えば以下のスクリプトはボリューム/ドライブ直下にあるmotoフォルダ内にある00.jpgファイルを開いてWeb用にGIF形式でresultフォルダ内に保存するものです。


// =======================================================
var id1 = charIDToTypeID( "Opn " );
var desc1 = new ActionDescriptor();
var id2 = charIDToTypeID( "null" );
desc1.putPath( id2, new File( "Macintosh HD:moto:00.jpg" ) );
var id3 = charIDToTypeID( "As " );
var id4 = charIDToTypeID( "JPEG" );
desc1.putClass( id3, id4 );
executeAction( id1, desc1, DialogModes.NO );

// =======================================================
var id5 = charIDToTypeID( "Expr" );
var desc2 = new ActionDescriptor();
var id6 = charIDToTypeID( "Usng" );
var desc3 = new ActionDescriptor();
var id7 = charIDToTypeID( "Op " );
var id8 = charIDToTypeID( "SWOp" );
var id9 = charIDToTypeID( "OpSa" );
desc3.putEnumerated( id7, id8, id9 );
var id10 = charIDToTypeID( "Fmt " );
var id11 = charIDToTypeID( "IRFm" );
var id12 = charIDToTypeID( "GIFf" );
desc3.putEnumerated( id10, id11, id12 );
var id13 = charIDToTypeID( "Intr" );
desc3.putBoolean( id13, true );
var id14 = charIDToTypeID( "RedA" );
var id15 = charIDToTypeID( "IRRd" );
var id16 = charIDToTypeID( "Sltv" );
desc3.putEnumerated( id14, id15, id16 );
var id17 = charIDToTypeID( "RChT" );
desc3.putBoolean( id17, false );
var id18 = charIDToTypeID( "RChV" );
desc3.putBoolean( id18, false );
var id19 = charIDToTypeID( "AuRd" );
desc3.putBoolean( id19, false );
var id20 = charIDToTypeID( "NCol" );
desc3.putInteger( id20, 256 );
var id21 = charIDToTypeID( "Dthr" );
var id22 = charIDToTypeID( "IRDt" );
var id23 = charIDToTypeID( "None" );
desc3.putEnumerated( id21, id22, id23 );
var id24 = charIDToTypeID( "DthA" );
desc3.putInteger( id24, 100 );
var id25 = charIDToTypeID( "DChS" );
desc3.putInteger( id25, 0 );
var id26 = charIDToTypeID( "DCUI" );
desc3.putInteger( id26, 0 );
var id27 = charIDToTypeID( "DChT" );
desc3.putBoolean( id27, false );
var id28 = charIDToTypeID( "DChV" );
desc3.putBoolean( id28, false );
var id29 = charIDToTypeID( "WebS" );
desc3.putInteger( id29, 0 );
var id30 = charIDToTypeID( "TDth" );
var id31 = charIDToTypeID( "IRDt" );
var id32 = charIDToTypeID( "None" );
desc3.putEnumerated( id30, id31, id32 );
var id33 = charIDToTypeID( "TDtA" );
desc3.putInteger( id33, 100 );
var id34 = charIDToTypeID( "Loss" );
desc3.putInteger( id34, 0 );
var id35 = charIDToTypeID( "LChS" );
desc3.putInteger( id35, 0 );
var id36 = charIDToTypeID( "LCUI" );
desc3.putInteger( id36, 100 );
var id37 = charIDToTypeID( "LChT" );
desc3.putBoolean( id37, false );
var id38 = charIDToTypeID( "LChV" );
desc3.putBoolean( id38, false );
var id39 = charIDToTypeID( "Trns" );
desc3.putBoolean( id39, false );
var id40 = charIDToTypeID( "Mtt " );
desc3.putBoolean( id40, true );
var id41 = charIDToTypeID( "MttR" );
desc3.putInteger( id41, 255 );
var id42 = charIDToTypeID( "MttG" );
desc3.putInteger( id42, 255 );
var id43 = charIDToTypeID( "MttB" );
desc3.putInteger( id43, 255 );
var id44 = charIDToTypeID( "SHTM" );
desc3.putBoolean( id44, false );
var id45 = charIDToTypeID( "SImg" );
desc3.putBoolean( id45, true );
var id46 = charIDToTypeID( "SSSO" );
desc3.putBoolean( id46, false );
var id47 = charIDToTypeID( "SSLt" );
var list1 = new ActionList();
desc3.putList( id47, list1 );
var id48 = charIDToTypeID( "DIDr" );
desc3.putBoolean( id48, true );
var id49 = charIDToTypeID( "In " );
desc3.putPath( id49, new File( "Macintosh HD:result:" ) );
var id50 = stringIDToTypeID( "SaveForWeb" );
desc2.putObject( id6, id50, desc3 );
executeAction( id5, desc2, DialogModes.NO );

// =======================================================
var id51 = charIDToTypeID( "Cls " );
var desc4 = new ActionDescriptor();
var id52 = charIDToTypeID( "Svng" );
var id53 = charIDToTypeID( "YsN " );
var id54 = charIDToTypeID( "N " );
desc4.putEnumerated( id52, id53, id54 );
executeAction( id51, desc4, DialogModes.NO );


このScriptingListenerJS.logに記録できるものはアクションで記録されるものであれば大丈夫です。逆にアクションで記録されないものは駄目です。Photoshopで用意されているJavaScriptのみではPhotoshopの多くの機能を利用することができません。しかし、今回のようなプラグインと組み合わせて標準のスクリプト機能ではできない部分を記録させて利用するとPhotoshopの機能をフルに使う事ができます。




[サンプルをダウンロード]