【Live2D】重複レイヤー名を抽出するPhotoshopスクリプト
Live2Dのパーツ分けしたpsdに同名のレイヤーがあると差し替えの時の管理でいろいろ大変なのでレイヤー名の重複を自動でチェックするスクリプト作りました
※Photoshopスクリプトの作り方、実行方法は割愛します。「Photoshopスクリプトの作り方 実行方法」などで検索しましょう。
/********/
/* main */
/********/
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("ファイルが開けませんでした");
}
}
}
この記事が気に入ったらサポートをしてみませんか?