Photoshopsdにおけるイベントの操作方法
前回のDeveiceCentralは完全にネタ記事でした。実用性があるかといえば微妙な代物です。zip圧縮を扱うのであれば、CEPエンジン経由でNODEを利用してNPMを利用するのが正当な流れです。まあ、CS6以前のワークフローでは活躍するかもしれませんが。
それはそうと、ぱげ始まったのですね。わたしも行ってみたいとは思いますが、そんな金と時間がどこにあるのでしょうorz。という事で平常営業なのですが、今回のネタはPhotoshopでのイベント管理です。他のアプリの様にeventListenerと記述したい所ですが、PSではこの様な記述はしません。代わりにnotifiersというクラスが存在します。ちょっと使いにくかったりしますがやってみます。
まずは「コピー」を捕えます。
var eventFile = File(“~/Desktop/testRes.jsx”);
if(!app.notifiersEnabled) app.notifiersEnabled = true;
app.notifiers.add(“copy”, eventFile);
この様に第一引数に4文字のeventIDをあてます。第2引数はトリガされた時に実行されるJavascriptファイルオブジェクト(イベントファイル)を指定します。第3引数はオプションでeventClassIDが入ります。こちらは後ほど説明します。
//testRes.jsx
alert(“Photoshop command invoked.”);
実行されるjsxファイルの内容はこんな感じで。実際はターゲットに応じた処理を書いたjsxファイルをそれぞれ用意します。
先のスクリプトを実行してPhotoshopでコピー操作を行います。
このようにイベントファイルが実行されてアラートが表示されました。
またまた困ったことにeventIDやeventClassIDがまとめられたドキュメントが存在しません。こういった場合、あの手この手で調べるのですが、その過程は割愛します。わかっている分だけ書きます。
基本的なeventID
open document [Opn ]
close document [Cls ]
print document [Prnt]
export document [Expr]
イベントIDは基本的に4文字となります。
さて、これ以降にはeventClassIDが必要となります。
app.notifiers.add("Dlt ", eventFile,"Lyr ");
これはレイヤーを削除した時にトリガされる構成です。この様に3つめの引数にeventClassIDを割り当てます。
以下に現在把握しているeventID、eventClassIDのリストを挙げておきます。
保存
start saving [save][saveBegin]
save success [save][saveSucceeded]
新規
new document [Mk ][Dcmn]
new layer [Mk ][Lyr ]
new channel [Mk ][Chnl]
new path [Mk ][Path]
new text Layer [Mk ][TxLr]
new solid Color Layer [Mk ][solidColorLayer]
new gradient Layer [Mk ][gradientLayer]
new pattern Layer [Mk ][patternLayer]
new levels Layer [Mk ][Lvls]
new curves Layer [Mk ][Crvs]
new color Balance Layer [Mk ][ClrB]
new brightness Contrast Layer [Mk ][BrgC]
new hue Saturation Layer [Mk ][HStr]
new selective Color Layer [Mk ][SlcC]
new channel Mixer Layer [Mk ][ChnM]
new gradient Map Layer [Mk ][GdMp]
new photo Filter Layer [Mk ][photoFilter]
new invert Layer [Mk ][Invr]
new threshold Layer [Mk ][Thrs]
new posterize Layer [Mk ][Pstr]
new brush [Mk ][Brsh]
new snapshot [Mk ][SnpS]
new swatch [Mk ][Clrs]
new tool Preset [Mk ][toolPreset]
new guide [Mk ][Gd ]
new spot Color Channel [Mk ][SCch]
new group from Layers [Mk ][layerSection]
new comp [Mk ][compsClass]
選択
select layer [slct][Lyr ]
select channel [slct][Chnl]
select document [slct][Dcmn]
select path [slct][Path]
削除
delete Layer [Dlt ][Lyr ]
delete Channel [Dlt ][Chnl]
delete Path [Dlt ][Path]
登録されたnotifiersですが、removeAll()メソッドで全削除できます。もちろん、notifierクラスには個別に削除できるremove()メソッドもあります。
参考までにnotifierのプロパティの状態は以下のようになっています。
event : copy
eventFile : ~/Desktop/testRes.jsx
eventClass :
typename : Notifier
parent : [Application Adobe Photoshop]
まあ、これだけ押さえとけばある程度のことは出来ると思います。