2017-03-25 14 views
1

「カラー」という名前の(サブグループ)レイヤーセットで表示されるレイヤーを検出するスクリプトが残っています。Photoshop Script - グループ/レイヤー内に表示されるレイヤーの名前を取得

以下のスクリプトは、表示されているすべてのレイヤーを確認して選択します。私は、上記のレイヤーセットでのみ同じことをするように働かせることはできません。

ご協力いただければ幸いです。グループと

#target photoshop 
 
app.bringToFront(); 
 

 
main(); 
 
function main(){ 
 
if(!documents.length) return; 
 
var Vis = getVisLayers(); 
 
deselectLayers(); 
 
for(var a in Vis){ 
 
    selectLayerById(Number(Vis[a]),true); 
 
    } 
 
} 
 
function getVisLayers(){ 
 
    var ref = new ActionReference(); 
 
    ref.putEnumerated(charIDToTypeID('Dcmn'), charIDToTypeID('Ordn'), charIDToTypeID('Trgt')); 
 
    var count = executeActionGet(ref).getInteger(charIDToTypeID('NmbL')) +1; 
 
    var Names=[]; 
 
try{ 
 
    activeDocument.backgroundLayer; 
 
var i = 0; }catch(e){ var i = 1; }; 
 
    for(i;i<count;i++){ 
 
     if(i == 0) continue; 
 
     ref = new ActionReference(); 
 
     ref.putIndex(charIDToTypeID('Lyr '), i); 
 
     var desc = executeActionGet(ref); 
 
     var layerName = desc.getString(charIDToTypeID('Nm ')); 
 
     var Id = desc.getInteger(stringIDToTypeID('layerID')); 
 
     if(layerName.match(/^<\/Layer group/)) continue; 
 
     var layerType = typeIDToStringID(desc.getEnumerationValue(stringIDToTypeID('layerSection'))); 
 
     var isLayerSet =(layerType == 'layerSectionContent') ? false:true; 
 
     var vis = desc.getBoolean(charIDToTypeID("Vsbl")); 
 
     if(!isLayerSet && vis) Names.push(Id); 
 
    }; 
 
return Names; 
 
}; 
 
function selectLayerById(ID, add) { 
 
    add = (add == undefined) ? add = false : add; 
 
    var ref = new ActionReference(); 
 
    ref.putIdentifier(charIDToTypeID('Lyr '), ID); 
 
    var desc = new ActionDescriptor(); 
 
    desc.putReference(charIDToTypeID('null'), ref); 
 
    if (add) { 
 
     desc.putEnumerated(stringIDToTypeID('selectionModifier'), stringIDToTypeID('selectionModifierType'), stringIDToTypeID('addToSelection')); 
 
    } 
 
    desc.putBoolean(charIDToTypeID('MkVs'), false); 
 
    executeAction(charIDToTypeID('slct'), desc, DialogModes.NO); 
 
} 
 
function deselectLayers() { 
 
    var desc01 = new ActionDescriptor(); 
 
     var ref01 = new ActionReference(); 
 
     ref01.putEnumerated(charIDToTypeID('Lyr '), charIDToTypeID('Ordn'), charIDToTypeID('Trgt')); 
 
    desc01.putReference(charIDToTypeID('null'), ref01); 
 
    executeAction(stringIDToTypeID('selectNoLayers'), desc01, DialogModes.NO); 
 
};

enter image description here

答えて

0

@Ghoul Foolのおかげで、私はついにこの作業をすることができました。どのレイヤーが表示されているかを確認し、この名前を変数として保存するだけでよいので、コードを少し変更しました。より熟練した人が、自分のコードを使用する他の人のために自分のコードを修正することができれば素晴らしいでしょう。

おかげで再び

// Checking which layer is visible in layeset (group) "Colors" in "Mockup.psd" aka mockupDoc and store it's name for later use in the "save" part. 
var front = mockupDoc.layerSets.getByName("Front"); 
var colors = front.layerSets.getByName("Colors"); 
for (var m = colors.layers.length - 1; m >= 0; m--) 
{ 
    var theLayer = colors.layers[m]; 
    if (theLayer.typename == "ArtLayer") 
{ 
    if (theLayer.visible == true) 
    { 
     // Sets a variable for the name of the visible Layer in the "Colors" Group, so i can use it later as a part of the Filename when saving. 
     var activeColor = theLayer.name; 
    } 
    } 
}; 
0

トラブルあなたは深い最後にジャンプしなければならないということです。残念ながら、Photoshopがレイヤーを追跡する方法は直感的ではありません。一番良いことは、再帰的な関数を持ち、すべてのレイヤーを調べることです。グループかどうかを判断できるからです。それが目に見える場合は、それから解決してください。

var allLayers = new Array(); 
var theLayers = collectAllLayers(app.activeDocument, 0); 

// function collect all layers 
function collectAllLayers (theParent, level) 
{ 
    for (var m = theParent.layers.length - 1; m >= 0; m--) 
    { 
    var theLayer = theParent.layers[m]; 

    if (theLayer.typename == "ArtLayer") 
    { 
     // find the art layers 
     if (theLayer.visible == true) 
     { 
     //do stuff here 
     } 
    } 
    else 
    { 
     allLayers.push(level + theLayer.name); 
     collectAllLayers(theLayer, level + 1) 
    } 
    } 
} 
+0

あなたの答えをありがとうございました。私が必要としている完全なスクリプトで長い道のりを歩んできましたが、私はPSスクリプトの初心者です。あなたが正しいと理解しているかどうかはわかりません。グループ "色"が表示されているかどうかを判断する必要はありませんが、このグループ内のどのレイヤーが表示されているかはわかりません。私のグループは "COLORS"と呼ばれ、このグループの中には "Yellow"、 "Black"、 "Orange"などがあります。今では、jpgをエクスポートするときにこれらのレイヤーのうちの1つしか表示されないので、ファイル名の一部としてカラー名を保存する必要があります。 – GTO

+0

グループを含むすべてのレイヤーにループします。それがアートレイヤーの場合は、それはおそらく後であり、それが見えるかどうかを判断します。コードをさらに調整して助けました。 –

+0

もう一度@Ghoul Fool - 私はまだ何時間も読んでいて、それを働かせようとしています。すべての表示レイヤーとグループを出力(アラート)できましたが、それ自体が "1Colors"として出力するグループ "Colors"の可視レイヤーの名前だけを出力しないようにしました。私は再び尋ねると申し訳ありません、私は自分自身でこれを解決するのが大好きです....しかし、私はばかだと思います。 – GTO