Help us understand the problem. What is going on with this article?

初心者がPhotoshopスクリプト(.jsx)を作ってみて得られた知識・ノウハウまとめ

More than 3 years have passed since last update.

概要

javascriptをほとんど書いたことが無い初心者がjsxでPhotoshopスクリプトを
書いて得られたノウハウを簡単にまとめてみました.

環境

Windows7 , 64ビット

Photoshop CC バージョン7 SP1

Photoshop上でスクリプト(.jsx)の実行

Alt + F → R → Bでスクリプト選択ウィンドウが出ます。
実行したいスクリプトを選んでOKを押すとそのスクリプトが実行されます。
ファイル(F) → スクリプト(R) → 参照(B) でも可

デバッグ関連

alert()を使うと便利

ドキュメント関連

現在開いているドキュメントを複製する

var copiedDoc = app.activeDocument.duplicate();

copiedDocに複製後のドキュメントが格納されます。

ドキュメントを閉じる

copiedDoc.close();

セーブ確認をスキップさせたい場合は以下のように書きます.

copiedDoc.close(SaveOptions.DONOTSAVECHANGES);

レイヤー関連

レイヤーを選択する

app.activeDocument.activeLayer = layer;

activeLayerに選択させたいレイヤーを代入すればOK

レイヤーの表示/非表示の設定

layer.visible = false; 

falseを入れると非表示、trueを入れると表示されます

現在開いているドキュメントの全てのレイヤーを非表示にする

HideLayers.jsx
function HideLayers(layObj) {
    var n = layObj.artLayers.length;
    if (n > 0) {
        for (var i = 0; i < n; i++) {
            // レイヤー非表示
            layObj.artLayers[i].visible = false;
        }
    }

    var ns = layObj.layerSets.length;
    if (ns > 0) {
        for (var i = 0; i < ns; i++) {
            HideLayers(layObj.layerSets[i])
        }
    }
}

// 現在開いているドキュメントを全て非表示
HideLayers(app.activeDocument);

レイヤーがフォルダであるかどうかの判定

layer.typename === "ArtLayer"

レイヤーがフォルダの場合はfalse、フォルダでない場合はtrueになります

テキスト入力フォームつきのウィンドウを出す

ウィンドウを出す

windowtest.jsx
win = new Window("dialog", "タイトル");
win.show();

以下のようなウィンドウが表示されます.
image
ESCキーで閉じます.

テキスト入力フォームつきのウィンドウを出す

windowtest.jsx
win = new Window("dialog", "タイトル");
win.add("edittext", { width: 100, height: 20, x: 100, y: 100 }, "ここに入力");
win.show();

以下のようなウィンドウが表示されます
image

ボタンを追加したい場合は第1引数に"button"、ラベルを追加したい場合は第1引数に"statictext"、
sliderなら"slider"を入力します。

これらは"ScriptUI"という名称らしいので "jsx ScriptUI" とかでGoogle検索すればいろいろ出てきます。

ボタン付きウィンドウを出し、ボタンクリックでコードを実行.

windowtest.jsx
win = new Window("dialog", "タイトル");
okbtn = win.add("button", { width: 80, height: 25, x: 40, y: 25 }, "OK");

okbtn.onClick = function () {
    alert("OKボタンが押されました");
    win.close();
}
win.show();

ボタンにフォーカスを乗せる

以下のように3つのボタンを追加して、Preview ボタンに最初からフォーカスを乗せたいとします

okbtn = win.add("button", { width: 80, height: 25, x: 25, y: 25 }, "OK");
prbtn = win.add("button", { width: 80, height: 25, x: 115, y: 25 }, "Preview");
cnbtn = win.add("button", { width: 80, height: 25, x: 205, y: 25 }, "Cancel");

そんなときは以下のようにactiveにtrueを入れればOK

okbtn.active = false;
prbtn.active = true;
cnbtn.active = false;

image

その他

選択ダイアログ表示

windowtest.jsx
folder = Folder.selectDialog("テキスト");

image

セーブダイアログ表示

windowtest.jsx
savename = File.saveDialog("保存するファイル名を入れてください");

image

プロンプト

windowtest.jsx
text = prompt("タイトル", "ここに入力");

image

参考にしたサイト

PhotoShopの自動処理スクリプト JSXを作成するときの参考リンクをまとめておく
http://www.1ft-seabass.jp/memo/2013/06/09/photoshop-jsx-list/

【Photoshop CS自動化作戦】
http://www.openspc2.org/book/PhotoshopCS/

PhotoshopでのWeb制作効率を向上させる「JSX」とは
http://stocker.jp/diary/photoshop-jsx/

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away