Photoshop CS3〜CC編 選択されたレイヤーに対して位置を揃える

今回はPhotoshopで選択されたレイヤーに対して位置を揃えるスクリプトです。このスクリプトは選択されたレイヤーと同じ階層にあるレイヤーが対象です。他の階層にあるレイヤーの位置は調整しません。
スクリプトは珍しく(?)GUIをつけてみました。ラジオボタンでどの位置に合わせるかを指定できるようになっています。OKボタンをクリックすると位置が調整されます。スクリプト実行終了時にアラートダイアログを表示させたい場合は「//alert("位置を調整しました");」の行の先頭の//を削除してください。

(function(){
var parent = activeDocument.activeLayer.parent;
var layObj = parent.artLayers;
// 位置を示す変数
var point = "";
// ここからGUI
var winObj = new Window("dialog", "レイヤーセット内位置調整", [0,0, 320, 170]);
var btnLeft = winObj.add("radiobutton", [ 20,10, 300, 25], "左端に合わせる");
var btnRight = winObj.add("radiobutton", [ 20,40, 300, 55], "右端に合わせる");
var btnUp = winObj.add("radiobutton", [ 20,70, 300, 85], "上端に合わせる");
var btnDown = winObj.add("radiobutton", [ 20,100, 300, 115], "下端に合わせる");
var okBtn = winObj.add("button", [ 180, 130, 300, 155], "OK", { name : "ok" });
var cancelBtn = winObj.add("button", [ 20, 130, 150, 155], "キャンセル", { name : "cancel" });
// ボタンにイベントを割り当てる
btnLeft.onClick = function(){
point = "LEFT";
}
btnRight.onClick = function(){
point = "RIGHT";
}
btnUp.onClick = function(){
point = "UP";
}
btnDown.onClick = function(){
point = "DOWN";
}
// 中央にGUIウィンドウを表示
winObj.center();
var n = winObj.show();
if (n != 1){ return; } // キャンセルボタンが押された
if (point == ""){ return; } // ラジオボタンが選択されなかった
var rect = activeDocument.activeLayer.bounds;
var baseX1 = parseFloat(rect[0]);
var baseY1 = parseFloat(rect[1]);
var baseX2 = parseFloat(rect[2]);
var baseY2 = parseFloat(rect[3]);
for(var i=0; i<layObj.length; i++){
var rect = layObj[i].bounds;
var x1 = parseFloat(rect[0]);
var y1 = parseFloat(rect[1]);
var x2 = parseFloat(rect[2]);
var y2 = parseFloat(rect[3]);
switch(point){
case "LEFT" : layObj[i].translate(baseX1-x1, 0); break;
case "RIGHT" : layObj[i].translate(baseX2-x2, 0); break;
case "UP" : layObj[i].translate(0, baseY1-y1); break;
case "DOWN" : layObj[i].translate(0, baseY2-y2); break;
}
}
//alert("位置を調整しました");
})();

ちなみに選択されているレイヤーのサイズで他のレイヤーを切り抜く場合は以下の1行でできます。また、手作業でやるなら、「コマンドキー(WindowsはCTRLキー)+A」「カーソルキーの上」「カーソルキーの下」とキーを押してからイメージメニュー>切り抜きになります。

activeDocument.crop(activeDocument.activeLayer.bounds);


[サンプルをダウンロード]