2013年10月21日月曜日

Photoshop7スクリプト Re:レイヤーをPNGファイルで書き出す

色々Photoshopのスクリプトを弄っていてなんとなくテクスチャアトラスの仕様が浮かんできたような
気がしないでもないので、作成の前に頭の中の整理も兼ねて必要な機能を試して行く。

今回は単純に現在の画像のレイヤーをPNGファイルで書き出すスクリプト。
すでに1回やっているけど、シンプルにまとめられた気がするのでもう一回やっとく。

作業工程

  1. 処理を行うレイヤーをアクティブにする。
  2. レイヤー名を取得する。
  3. レイヤーの画像をコピー。
  4. 新しいドキュメントを作成する。
  5. 作成したドキュメントに画像を貼り付ける。
  6. 作成したドキュメントの表示部分を結合する。
  7. ドキュメントをPNG形式で保存。
上の処理をレイヤー分繰り返す。

・処理を行うレイヤーをアクティブにする


ちゃんとコピーしたい画像だけ処理しよう。
これはドキュメントもだけど、ちゃんと操作したいやつをアクティブにしておかないと怒られる。
ループの前に全レイヤーを不可視にして、ループの先頭で処理を行う。

/*---------------------------------------------------------------------------*/
doc.activeLayer = doc.layers[i];
doc.layers[i].visible = true;
/*---------------------------------------------------------------------------*/

ループの最後にレイヤーを不可視にするのも忘れずに。

・レイヤー名を取得する


レイヤー名をそのままファイル名に使うので必要な処理。自分で名前をつけるなら必要ない。
レイヤー名は ドキュメント.layers[レイヤーインデックス].name の中に入っている。

・レイヤーの画像をコピー


ドキュメントを全選択してコピーを行う。

/*---------------------------------------------------------------------------*/
doc.selection.selectAll();
doc.selection.copy();
/*---------------------------------------------------------------------------*/

・新しいドキュメントを作成する


documentsのaddという関数を使う。引数には元のドキュメントの値をそのまま渡せばいいと思う。
戻り値として新しいドキュメントが返ってくる。

・作成したドキュメントに画像を貼り付ける


新しいドキュメントを全選択してpasteメソッドを使う。
この時引数にtrueを渡すと選択範囲に貼り付けになる。

・作成したドキュメントの表示部分を結合する


新しいドキュメントでmergeVisibleLayersメソッドを使う。
この処理をしないと保存するときにダイアログが表示されてしまうようだ。

・ドキュメントをPNG形式で保存


/*---------------------------------------------------------------------------*/
var file = new File( "新しいファイル名" );
var pngOpt = new PNGSaveOptions();
dstDoc.saveAs( file , pngOpt, false, Extension.LOWERCASE );
dstDoc.close();
/*---------------------------------------------------------------------------*/

ファイルは保存するときにちゃんとパスを指定しよう。指定しないと保存されないっぽい?
ドキュメントのフルパスからファイル名なり拡張子を抜き取るのが楽。
PNGSaveOptionsの中身で保存するときのオプションを設定できる。
saveAsで最後に指定しているのは拡張子のオプション。今回は小文字で保存する。
このドキュメントはもう使わないので、保存したらcloseで閉じている。

とりあえずタイトルどおりのスクリプトを作ったときの処理と、
処理の簡単な内容及び注意事項をまとめてみた。
かなり長くなってしまったなあ。

0 件のコメント:

コメントを投稿