見出し画像

【Photoshopスクリプト】同名のレイヤー名を抽出する

① 実行すると「同じレイヤー名をチェックし、テキストファイルに出力します。」とメッセージが表示される。そのままOKを押す。
② 少し待つと以下の③もしくは④のメッセージが表示される
③ 同じレイヤー名がなければ「同じレイヤー名はありません。」とメッセージが出力される。
④ 同じレイヤー名があれば「同じレイヤー名が◯個ありました。テキストファイルに出力します。"」とメッセージが出力されるのでテキストファイルを保存する。

以下コード全体です。

app.bringToFront();
if (app.documents.length ==0){
	//ドキュメントが開かれていない場合は処理をしない。
}else{
	//作業するドキュメントの参照
 	var parent = activeDocument;
	alert("同じレイヤー名をチェックし、テキストファイルに出力します。");
	
	// レイヤー名を全取得
	var allLayerName = [];
	getAllLayerName(parent);

	// 重複レイヤー名を抽出
	var sameLayerName;
	sameLayerName = findDuplication();
	
	// 書き出し
	if(sameLayerName.length > 0){	
		alert("同じレイヤー名が" + sameLayerName.length + "個ありました。テキストファイルに出力します。");
		writeTextFile(sameLayerName);
	}else{
		alert("同じレイヤー名はありません。");
	}
}

function getAllLayerName(parent){
	var ChildLayers= parent.layers;
	for (var i = 0; i < ChildLayers.length; i++){
		if (ChildLayers[i].typename == "LayerSet"){
			//レイヤーセットの場合は再帰処理
			allLayerName.push(ChildLayers[i].name);
			getAllLayerName(ChildLayers[i]);
			
		}else if(ChildLayers[i].typename == "ArtLayer"){
			//レイヤー名を取得
			allLayerName.push(ChildLayers[i].name);
		}
	}
}

function findDuplication(){
	var s = [];
	allLayerName.sort();
	for(var i = 0 ; i < allLayerName.length ; i++){
		if(allLayerName[i] == allLayerName[i+1]){
			s.push(allLayerName[i]);
			while(allLayerName[i] == allLayerName[i+1]){
				i++;
			}
		}
	}
	return s;
}

function writeTextFile(sameLayerName){
	CR = String.fromCharCode(13);
	savename = File.saveDialog("保存","*.txt", "txt", "IsUnique.txt");
	if (savename){
		fileObj = new File(savename);
		flag = fileObj.open("w");
		if (flag == true){
			for (var i = 0 ; i < sameLayerName.length ; i++){
				fileObj.write(sameLayerName[i]+CR);
			}
			fileObj.close();
		}else{
			alert("ファイルが開けませんでした");
		}
	}
}

※本記事のコードは参考としてご利用ください

ここから先は

0字
マガジン中のスクリプトのコードはすべて無料で見ることができます。 Live2D制作のためのpsdファイル作業を効率化、スピードアップしたい方におすすめです。 役にたったら投げ銭としてマガジンを購入していただけると活動の糧になります。

作業効率化のためにつくった自分用のPhotoshopスクリプトです

この記事が気に入ったらチップで応援してみませんか?