今回はPhotoshopの「復帰」をスクリプトで実行する方法をご紹介します。非常に簡単なコードなので単発記事となります。
とあるポイントを基準に繰り返し画像処理を行う場合などに便利なので覚えておくとよいかと思います。(勿論、そのポイントに戻るときに「復帰」を使うわけです)
最終的なコード
(function() { var desc = new ActionDescriptor(); var revertID = charIDToTypeID('Rvrt'); app.executeAction(revertID, desc, DialogModes.NO); })();
たったの5行。これだけです。例のごとくコードを書いた順番に見ていきます。
アクションを作成し、実行する
var desc = new ActionDescriptor(); var revertID = charIDToTypeID('Rvrt'); app.executeAction(revertID, desc, DialogModes.NO);
実質コードは上記の3行です。そしてその中でも重要なのは3行目で、1行目・2行目はその準備として変数を用意しているだけです。つまりワンライナーで書くと下記のようになります。
app.executeAction(charIDToTypeID('Rvrt'), new ActionDescriptor(), DialogModes.NO);
このexecuteAction
メソッドについて見ていきましょう。
executeAction(イベントID, アクションデスクリプター, ダイアログモード)
executeAction
メソッドはその名の通りアクションを実行するメソッドです。ここで重要なのは第一引数のイベントIDです。このイベントIDによってアクションの挙動が指定されます。
ちなみにこのイベントIDはPhotoshopが理解できるIDなので、人間がわかりやすく管理できるようcharIDToTypeID
関数が用意されています。この関数に4文字のコードを渡してあげることでPhotoshopが理解できるIDに変換してくれます。
下記表に乗っているコードはほんの一例です。公式ドキュメントに載っていないものも多々あるので、実際にはつど調査しながら実装する形になります
charIDToTypeIDに渡すコード(文字列) | 意味 |
---|---|
'Rvrt' | 復帰 |
'quit' | 終了 |
'Msk ' | マスクID |
コードは4文字しばりなので、Msk
ではなくMsk␣
となるところが注意です(最後にスペースが入っています)
また第三引数についても少し見ていくと下記のようになります。
ダイアログモード | 意味 |
---|---|
DialogModes.ALL | ダイアログ、アラートともに表示する |
DialogModes.NO | ダイアログ、アラートともに表示しない |
DialogModes.ERROR | ダイアログは非表示、アラートは表示する |
今回はサクサク動かしたいのでDialogModes.NO
を採用しているわけです。
最後に即時関数にくるんでおしまい
(function() { var desc = new ActionDescriptor(); var revertID = charIDToTypeID('Rvrt'); app.executeAction(revertID, desc, DialogModes.NO); })();
(function() { ... })();
で処理をくるむことでグローバルスコープへの名前空間汚染がなくせます。
例外処理
上記コードでほとんどのケースで動作するのですが、実は下記状況でエラーがでます。
- 一度も保存していない場合
「復帰」をスクリプトに組み込んでいる以上、一度も保存していないケースは想定しにくいのですが、こちらにちゃんと対応する場合は下記のように例外処理をはさめばよいでしょう。
もちろん、コメントアウトしたdo anything
のところにエラー時の処理を書いてあげることになります。
(function () { var desc = new ActionDescriptor(); var revertID = charIDToTypeID('Rvrt'); try { app.executeAction(revertID, desc, DialogModes.NO); } catch (e) { // do anything } })();
まとめ
いくつかの画像サイズにリサイズして書き出しを繰り返すなどという作業はよくやると思います。そんなとき、ファイルをつど開き直すのも手ですが、復帰を利用しても良いでしょう。