サークル獏の佐藤敏 Unityとか備忘録

サークル獏の佐藤敏がUnityとかで知ったTipsを書いておく備忘録です。

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();

導入方法を解説されているサイトの例

miyabix.com