Photoshopで生成されるレイヤーの名前を変える(スクリプトイベントマネージャー使用)※2016/02/17 追記

Twitter上で「PhotoShop日本語版で生成するレイヤー名を英語にする方法ないのかな」と言われている方がいたので

スクリプトイベントマネージャーでできないかなぁと調べてみました。

 

完璧ではないですが、一応下記のような感じで新規レイヤーを出すたびにレイヤー名を置換 or 書き換えはできます。

============================================

 

※2016/02/17追記

このブログを公開したあとで @senra_spiral さんに、レイヤー名などを日本語化させたくない場合、日本語に変換する元になっているdatファイルを直接編集 or コメントアウトすれば良いですよと教えて頂きました。

 https://twitter.com/senra_spiral/status/699375909837475840

 

やり方はインストールされているPhotoshopのフォルダの中のSupport Files

(CC2014の場合 : C:\Program Files\Adobe\Adobe Photoshop CC 2014\Locales\ja_JP\Support Files)

にある tw10428.dat をテキストエディタなどで開き、

日本語にしたくない箇所(今回の趣旨でいう新規レイヤーは "$$$/LayerNameTemplate=レイヤー <<<>>>" )を探して、

日本語の箇所を好きな文字列にするか、もしくはその行の頭に//をつけてコメントアウトしてください。

こちらだときちんとLayer 1 、Layer 2 …となってくれます。

 

一部を英語バージョンと同じにしたい場合などはこちらの方法がシンプルでスマートですね!

senra_spiralさんありがとうございます m(_ _)m

 

============================================


まずPhotoshopのファイル>スクリプト>スクリプトイベントマネージャーというのがあるのはご存知でしょうか?

こちらはPhotoshop上でユーザーが何か行ったときに、それと同時に登録したスクリプトやアクションを実行してくれるものです。

スクリプトイベントマネージャーをクリックするとこんなウィンドウが開きます。

「Photoshop イベント」のプルダウンをクリックしてみると、

デフォルトでは

  ・アプリケーションを起動

  ・新規ドキュメント

  ・ドキュメントを開く

  ・ドキュメントを保存

  ・ドキュメントを閉じる

  ・ドキュメントをプリント

  ・ドキュメントを書き出し

  ・すべてのイベント

というイベントが用意されています。

 

一時期、Twitter上でも(自分のTLだけ?)盛り上がっていたこちらの記事もこのデフォルトのイベントの「ドキュメントを保存」と同時にjpgで保存するスクリプトを実行して保存されていますね。

 

5Kaiten.net » Photoshop用スクリプト「AUTO_jpg」の紹介
http://www.5kaiten.net/?p=465

今回やりたいレイヤー追加されたときのイベントですが、デフォルトでは用意されていません…。

 

そこでイベントをどうやって調べるか、ですがまだ自分も100%確実な見つけ方は分かってないですが

一応書いておきます。

PhotoshopでScriptListenerというものがあり、CC以降だとファイル>スクリプトの中にON/OFFするスクリプトが用意されていますが、それ以前のバージョンだと

C:\Program Files\Adobe\Adobe Photoshop CS5 (64 Bit)\Scripting\Utilities

の中にある「ScriptListener.8li」を

C:\Program Files\Adobe\Adobe Photoshop CS5 (64 Bit)\Plug-ins\Automate

にコピーして、Photoshopを起動すると、Automateフォルダの中にScriptListenerを置いている間ずっと動作を監視し、

デスクトップなどに ScriptingListenerJS.log と ScriptingListenerVB.log が作られます。

この辺の説明はちょっと省きますがJavascriptでのログとVBSでのログが出力されてます。

 

レイヤーを追加したあとのScriptingListenerJS.logを見るとこんな感じ↓になっています。

// =======================================================
var idMk = charIDToTypeID( "Mk  " );
    var desc3 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref1 = new ActionReference();
        var idLyr = charIDToTypeID( "Lyr " );
        ref1.putClass( idLyr );
    desc3.putReference( idnull, ref1 );
executeAction( idMk, desc3, DialogModes.NO );
// =======================================================

 

ぱっと見、意味分かんないわかんないですよね。

この中のどれかがイベント名なのですよ!

 

結論から言うとレイヤー追加のイベントに必要なのは「Mk  」と「Lyr 」です。

追加するときはこんな感じで書きます。

イベント名の所はなんでもいいです。

説明ラベルのところに「Mk  ,Lyr 」と書きます。

ここですごくわかりづらい注意ポイント!!!!!

Mkの後ろに半角スペースが2つ、Lyrの後ろに半角スペースが1つあることにご注意下さい。

これを入れないとなぜかきちんと動作してくれません。

確かにScriptingListenerJSのログで出力されていたMkやLyrの後ろにスペースありますね。

 

なぜこの2つだとわかったかといいますと、

間違えていてもいいのでイベントを追加してみると

C:\Users\ユーザー名\AppData\Roaming\Adobe\Adobe Photoshop CS5\Adobe Photoshop CS5 Settings

などに「スクリプトイベントマネージャー.xml」が生成されます。

 

この中にデフォルトで用意されている「新規ドキュメント」や「ドキュメントを保存」などの

valueとvalueClassというのが書かれています。

新規ドキュメントだと valueがMk  、で valueClass が Dcmn と書かれており、もしやと思い入力したMkとLyrが当たっていました。

そして、一番下に自分で追加したイベントもあるはずです。

間違って入力して修正したい場合やイベントを消したい場合はこちらから消して下さい。

※消すときは<10>  </10>などの数字が連番になるように最後に直してあげて下さい。あとでスクリプトイベントマネージャーがエラーになります。


そして、あとは名前を変更するスクリプトのみですね!

ひとまず例として2通りあげておきます。

 

●なんぼつくってもレイヤー名が「Layer」バージョン

activeDocument.activeLayer.name = "Layer";

 

●アクティブドキュメントのレイヤー数を「Layer」の後ろにつけていくバージョン
var layerLength = activeDocument.artLayers.length;
activeDocument.activeLayer.name = "Layer" + layerLength;

 

テキストエディタにコピーして適当に名前を付けて保存してもらい(拡張子はjsx)、

スクリプトイベントマネージャーの「スクリプト」のプルダウンから参照を選んで、保存したファイルを指定して下さい。

 

一番最初は レイヤー を Layer に置換する方法を試しました。

レイヤー1がLayer1になって、レイヤー2はLayer2になると思うじゃないですか?

 

違うんです・・・

レイヤー1をLayer1にしてしまうと、レイヤー1がなくなるからレイヤー2ではなく、レイヤー1が作られるのです。

なので、この置換の方法だと永遠とLayer1が作られます・・・囧rz

 

ここが個人的にまだまだ完璧じゃないなぁと思っているところで、

もし回避方法ご存知の方いらっしゃいましたら教えて下さい。

 

あと、上記の方法でうまく行かない場合はここのコメントかTwitterにご連絡下さい。