45
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-02-03

#概要
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/

45
46
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?