如何在 photoshop 中循环分组?

How to loop on groups in photoshop?

我有这段代码,它可以工作,但它看不到图层组内的文本,也没有迭代它。

var itemsAry=['emil','lardtub','100','jsbus', 'rasmus','null','1000000'];

var layers = app.activeDocument.layers;  
for (var i =0; i<layers.length; i++) {  

    if (layers[i].kind == "LayerKind.TEXT") {
        
        layers[i].textItem.contents=itemsAry[i]
    }
}

虽然 looping through all layers in a document is on SO,但从循环多个层到循环遍历其中包含组的 psd 的尴尬可能会令人困惑。

基本上,您需要一个递归函数来遍历组。

请注意,确保在更改文本时关闭脚本开头的所有对话框。否则,您必须验证每个文本更改确认。

// Switch off any dialog boxes
displayDialogs = DialogModes.NO; // OFF

var itemsAry=['emil','lardtub','100','jsbus', 'rasmus','null','1000000'];


// group layer vegetables
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];
      
      // apply the function to layersets;
      if (theLayer.typename == "ArtLayer")
      {
            if (theLayer.kind == "LayerKind.TEXT") 
            {
            
                theLayer.textItem.contents=itemsAry[m];
            }
      }
      else
      {
         collectAllLayers(theLayer, level + 1)
      }
   }
}

// Make sure dialogs back on
displayDialogs = DialogModes.ALL; // ON