PhotoShopで作業中に連番を付けてセーブするスクリプト
そのまんま、「PhotoShopで作業中に連番を付けてセーブするJavaScriptのコード」です。
ファイル名に制限があったりpsd・jpg・pngしか対応していなかったり拡張子で中身判定する大雑把な奴だったりしますが、とりあえず置いておきます。
バグもあるかもしれません。。。
Windowsでしか動作確認していません。
save.jsとか適当な名前で保存してPhotoShopのスクリプトフォルダに放り込んでください。
(例えば C:\Program Files\Adobe\Adobe Photoshop 2020\Presets\Scriptsとかですかね)
導入方法自体は色々なところで解説されているのでそちらに譲ります。
自分はF11キーを押すとこのスクリプトが起動するようにしています。
ソースコード
function saveFunc()
{
try {
//ファイル名を取得
docName = activeDocument.fullName.fsName.toString();
} catch(msg) {
alert(msg + " 一度どこかにセーブしてから実行して下さい");
return;
}
//ファイル名の長さ
l = docName.length;
if(l <= 8) {
alert("ファイル名が短すぎます");
return;
}
//拡張子を取り出す
ext = docName.substr(l-3);
if(ext.toLowerCase() == "psd")
saveMode = "psd";
else if(ext.toLowerCase() == "jpg")
saveMode = "jpg";
else if(ext.toLowerCase() == "png")
saveMode = "png";
else //jpgでもpngでもなければとりあえずpsdに
saveMode = "psd";
//後ろから5~8番目の文字を取得(例えばpics_006.psdなら_006の部分になる)
c = docName.charCodeAt(l-8); //8番目
c2 = docName.charCodeAt(l-7); //7番目
c3 = docName.charCodeAt(l-6); //6番目
c4 = docName.charCodeAt(l-5); //5番目
//_034 とか _421 とか _200 とかの並びになってるか?(正規表現とか使うほうがかっこいいけど、
//そこまでやるほどのスクリプトじゃないのでif連打)
if(c == 95 && (c2 >= 48 && c2 < 48+10) && (c3 >= 48 && c3 < 48+10) && (c4 >= 48 && c4 < 48+10)) {
//数字部分の文字列を数字に変換して
n = eval(docName.substr(l-7,3));
do {
//1を足す
n += 1;
//桁数に応じて新しいファイル名を作り
if(n > 999) {
alert("1000以上には対応していません");
return;
} else if(n < 10) {
fileName = docName.substr(0,l-7) + "00" + n + "." + saveMode;
} else if(n < 100) {
fileName = docName.substr(0,l-7) + "0" + n + "." + saveMode;
} else {
fileName = docName.substr(0,l-7) + n + "." + saveMode;
}
saveFileObj = new File(fileName);
} while(saveFileObj.exists);
//結果的に既存のファイル名とかぶってしまったらさらにnを1増やしてやり直す
} else {
//末尾が_002.psdとかになってないなら000からスタート
fileName = docName.substr(0,l-4) + "_000" + "." + saveMode;
saveFileObj = new File(fileName);
}
//セーブするときの設定
psdSaveOpt = new PhotoshopSaveOptions;
psdSaveOpt.alphaChannels = true;
psdSaveOpt.annotations = true;
psdSaveOpt.embedColorProfile = true;
psdSaveOpt.layers = true;
psdSaveOpt.spotColors = true;
jpgSaveOpt = new JPEGSaveOptions();
jpgSaveOpt.quality = 8;// 画質 最高画質で12?
jpgSaveOpt.embedColorProfile = false;
jpgSaveOpt.formatOptions = FormatOptions.OPTIMIZEDBASELINE;
pngSaveOpt = new PNGSaveOptions();
pngSaveOpt.interlaced = false;
//保存する
try {
if(saveMode == "psd")
activeDocument.saveAs(saveFileObj,psdSaveOpt,false,Extension.LOWERCASE );
else if(saveMode == "jpg")
activeDocument.saveAs(saveFileObj,jpgSaveOpt,false,Extension.LOWERCASE );
else if(saveMode == "png")
activeDocument.saveAs(saveFileObj,pngSaveOpt,false,Extension.LOWERCASE );
} catch(msg) {
alert(msg + " 保存できませんでした");
}
}
//本体実行
saveFunc();