Photoshop CS3〜CC編 画像を左上と右下の相対座標を指定して切り抜く

今回は、Photoshopで画像を左上と右下の相対座標を指定して切り抜くスクリプトです。Photoshopには選択した範囲を切り抜く機能がありますが、アクションで登録してしまうと、固定された座標と幅になってしまいます。左上からの位置と右下からの位置を設定して切り抜きたい場合には困ります。

もともとの用途は、DTP処理でMac OS X (OS X)でキャプチャーされたウィンドウの影をなくしたい(切り抜きたい)というものです。

新しいOS Xだと影なしでキャプチャーできますが、それ以前は設定が必要だったり、また場合によっては白地や背景画像が含まれた状態になっていることがあります。そんなとき、今回のスクリプトを使うと簡単に切り抜き&保存ができます。

(function cutTransparent(){
// GUI部分
var winObj = new Window("dialog", "透明部分切り抜き", [0,0,320,270]);
var cropSize1 = winObj.add("radiobutton", [20, 10, 300, 25], "左上(40,25)から右下(-40, -55)で切り抜く");
var cropSize2 = winObj.add("radiobutton", [20, 30, 300, 45], "左上(5,2)から右下(-5, -7)で切り抜く");
var cropSize3 = winObj.add("radiobutton", [20, 50, 300, 65], "左上(57,35)から右下(-57, -79)で切り抜く");
var cropSize4 = winObj.add("radiobutton", [20, 70, 300, 85], "以下の座標で切り抜く");
winObj.add("statictext", [40, 100, 60, 120], "左");
winObj.add("statictext", [140, 100, 160, 120], "上");
winObj.add("statictext", [40, 130, 60, 150], "右");
winObj.add("statictext", [140, 130, 160, 150], "下");
var x1 = winObj.add("edittext", [60, 100, 100, 120], "67");
var y1 = winObj.add("edittext", [160, 100, 200, 120], "40");
var x2 = winObj.add("edittext", [60, 130, 100, 150], "67");
var y2 = winObj.add("edittext", [160, 130, 200, 150], "89");
var btnCrop = winObj.add("button", [20, 180, 300, 205], "切り抜く");
var btnSaveClose = winObj.add("button", [20, 210, 300, 235], "保存して閉じる");
var btnUndo = winObj.add("button", [20, 240, 300, 265], "切り抜きを取り消し");
// ボタンにイベントを割り当てる
btnCrop.onClick = function(){
var docW = activeDocument.width.value; // 横幅
var docH = activeDocument.height.value; // 縦幅
var cTop = null;
if(cropSize1.value== true){
var cTop = 25;
var cLeft = 40;
var cRight = docW - 40;
var cBottom = docH - 55;
}
if(cropSize2.value== true){
var cTop = 2;
var cLeft = 5;
var cRight = docW - 5;
var cBottom = docH - 7;
}
if(cropSize3.value== true){
var cTop = 35;
var cLeft = 57;
var cRight = docW - 57;
var cBottom = docH - 79;
}
if(cropSize4.value== true){
var cTop = parseInt(y1.text);
var cLeft = parseInt(x1.text);
var cRight = docW - parseInt(x2.text);
var cBottom = docH - parseInt(y2.text);
}
if (cTop != null){
activeDocument.crop([cLeft, cTop, cRight, cBottom]);
app.refresh();
}else{
alert("切り抜く種類を指定してください");
}
}
// 切り抜き後に保存して閉じる
btnSaveClose.onClick = function(){
activeDocument.close(SaveOptions.SAVECHANGES);
}
// 失敗したら元に戻せるようにするボタン
btnUndo.onClick = function(){
var idslct = charIDToTypeID( "slct" );
var desc7 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref3 = new ActionReference();
var idHstS = charIDToTypeID( "HstS" );
var idOrdn = charIDToTypeID( "Ordn" );
var idPrvs = charIDToTypeID( "Prvs" );
ref3.putEnumerated( idHstS, idOrdn, idPrvs );
desc7.putReference( idnull, ref3 );
executeAction( idslct, desc7, DialogModes.NO );
app.refresh();
}
winObj.center();
winObj.show();
})();

もし、切り抜きパターンをキーボードで手軽にやりたいのであれば、以下のスクリプトを作成し、PhotoshopのアプリケーションがあるフォルダのPresetsフォルダのScriptsフォルダに入れます。入れたらPhotoshopを起動します。

すると、ファイルメニューのスクリプトの一覧に作成したスクリプトが表示されます。あとは、アクションに設定すればできあがりです。

var docW = activeDocument.width.value; // 横幅
var docH = activeDocument.height.value; // 縦幅
var cTop = 25;
var cLeft = 40;
var cRight = docW - 40;
var cBottom = docH - 55;
activeDocument.crop([cLeft,cTop,cRight,cBottom]);


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