ExtendScriptで処理を自動化
今日ちょろっと話が出たのでjsx晒し。Adobe製品であればExtendScript Toolkitで処理を自動化できます(すべての製品ではないです)。単純作業を大量にといった場合手作業でやるより速いです。スクリプトはJSやAppleScript, VBScriptなどが使えたと思います。PSなどにあるアクション以上のことをしたい場合には便利です。
このソースは初めてな上に時間もなかったので適当です。画像を大量に書き出すために作りました。またMacではPS CS 3をWeb用に保存で時間がかかることもよくあり大量生産を手作業で行うには相当手間な作業でした。
-
var layNameAry = new Array ("layText", "layActiveOn", "layActiveDefault", "layStaticOn", "layStaticDefault");
-
var fileName = nameCheck();
-
var dObj = activeDocument;
-
var laysAry = dObj.layers;
-
var laysNum= dObj.layers.length;
-
-
for(var i=0; i<laysNum; i++) {
-
laysHidden(laysAry, laysNum);
-
laysAry[0].textItem.color .rgb.red = 255;
-
laysAry[0].textItem.color .rgb.green = 255;
-
laysAry[0].textItem.color .rgb.blue = 255;
-
laysAry[0].opacity = 100;
-
-
switch(i) {
-
case 0:
-
break;
-
case 1:
-
fileNameOp = "_over";
-
laysAry[i].visible = true;
-
pngSave(dObj, fileName, fileNameOp, "action/");
-
break;
-
case 2:
-
fileNameOp = "_void";
-
laysAry[0].opacity = 50;
-
laysAry[i].visible = true;
-
pngSave(dObj, fileName, fileNameOp, "action/");
-
break;
-
case 3:
-
fileNameOp = "_normal";
-
laysAry[i].visible = true;
-
pngSave(dObj, fileName, fileNameOp, "action/");
-
break;
-
case 4:
-
fileNameOp = "_over";
-
laysAry[i].visible = true;
-
pngSave(dObj, fileName, fileNameOp, "cancel/");
-
break;
-
case 5:
-
fileNameOp = "_void";
-
laysAry[0].textItem.color .rgb.red = 102;
-
laysAry[0].textItem.color .rgb.green = 102;
-
laysAry[0].textItem.color .rgb.blue = 102;
-
laysAry[0].opacity = 50;
-
laysAry[i].visible = true;
-
pngSave(dObj, fileName, fileNameOp, "cancel/");
-
break;
-
case 6:
-
laysAry[0].textItem.color .rgb.red = 102;
-
laysAry[0].textItem.color .rgb.green = 102;
-
laysAry[0].textItem.color .rgb.blue = 102;
-
fileNameOp = "_normal";
-
laysAry[i].visible = true;
-
pngSave(dObj, fileName, fileNameOp, "cancel/");
-
break;
-
}
-
}
-
-
function laysHidden(laysAry, laysNum) {
-
for(var i=0; i<laysNum; i++) {
-
laysAry[i].visible = false;
-
}
-
laysAry[0].visible = true;
-
}
-
-
function pngSave(dObj, fileName, fileNameOp, dir) {
-
var exp = new ExportOptionsSaveForWeb();
-
exp.format = SaveDocumentType.PNG;
-
exp.PNG8 = false;
-
exp.interlaced = false;
-
var imgfile = new File("/***/"+ "***/"+ dir + "btn-" + fileName + fileNameOp + ".png");
-
dObj.exportDocument(imgfile, ExportType.SAVEFORWEB, exp);
-
}
-
-
function nameCheck() {
-
var fileName = prompt("ファイル名を入力してくだ", "");
-
if(fileName != "") {
-
return fileName;
-
} else {
-
nameCheck();
-
}
-
}
細かいところは忘れましたがボタンのラベルはダイアログを出して入力しています。ファイルやDBからラベルを取得してすべて自動化もできると思います。ただこのときは時間がなかったので手作業とスクリプト作成のトータルで一番早い方法でやっています。