Photoshop Java脚本以获取活动文档中的所有层

2022-09-04 00:00:00 javascript photoshop photoshop-script

我相信Photoshop的编写者以前应该讨论过这个问题。我写了一个解决方案如下。我认为这在逻辑上是正确的,但结果是不正确的。有人可以帮助检查代码中的错误之处,或者对这个主题有想法吗?我想获取文档中的所有层。

编码:

function getAllLayersInLayerSets(layerNodes) {

 var retList = [];

 for (var i=0; i<layerNodes.length; i++) {

    if(layerNodes[i].layerSets.length > 0)
    {
        var tmp = getAllLayersInLayerSets(layerNodes[i].layerSets);

        var j = (tmp == null) ? -1 : tmp.length-1;
        while(tmp && j>=0)
        {
            retList.push(tmp[i]);
            j--;
        }
    }
    for(var layerIndex=0; layerIndex < layerNodes[i].artLayers.length; layerIndex++) 
    {
        var layer=layerNodes[i].artLayers[layerIndex];
        retList.push(layer);
    }

}

return retList;  
}

非常感谢您的帮助或讨论。


解决方案

我知道这是一个旧帖子,但这可能对某些人有用。

我正在寻找一个函数,它可以让我在Photoshop Comp中获得所有ArtLayer,包括嵌套在组中的层。上面的函数返回未定义,所以我对其进行了修改并使其正常工作。

var doc = app.activeDocument;
var allLayers = [];
var allLayers = collectAllLayers(doc, allLayers);

function collectAllLayers (doc, allLayers){
    for (var m = 0; m < doc.layers.length; m++){
        var theLayer = doc.layers[m];
        if (theLayer.typename === "ArtLayer"){
            allLayers.push(theLayer);
        }else{
            collectAllLayers(theLayer, allLayers);
        }
    }
    return allLayers;
}

相关文章