Photoshop | 表示状態のレイヤー数を求める


スクリプトでは、レイヤーを「ArtLayer」
グループを「LayerSet」と呼んでいる。

このレイヤーの名前を表示してみる。

レイヤー名を表示する

#target photoshop

var doc = app.activeDocument;
for (var i = 0; i < doc.artLayers.length; i++) {
    $.writeln(doc.artLayers[i]);
}

// [ArtLayer 背景]
// と表示される

グループ名を表示する

#target photoshop

var doc = app.activeDocument;
for (var i = 0; i < doc.layerSets.length; i++) {
    $.writeln(doc.layerSets[i]);
}

// [LayerSet グループ 1]
// [LayerSet グループ 3]
// と表示される

レイヤー名とグループ名を表示する

#target photoshop

var doc = app.activeDocument;
for (var i = 0; i < doc.layers.length; i++) {
    $.writeln(doc.layers[i]);
}

// [LayerSet グループ 1]
// [LayerSet グループ 3]
// [ArtLayer 背景]
// と表示される

すべてのレイヤー数を求める

今までは一番上の階層のみを対象にしていたが、
すべてのレイヤー数を求めるには、
各グループ内のレイヤー数を加算する必要がある。

#target photoshop

function getArtLayerCount(doc) {
    var count = doc.artLayers.length;
    for (var i = 0; i < doc.layerSets.length; i++) {
        count += getArtLayerCount(doc.layerSets[i]);
    }
    return count;
}

var count = getArtLayerCount(doc);
$.writeln(count);

// 4
// と表示される

表示状態のレイヤー数を求める

#target photoshop

var doc = app.activeDocument;

function getVisibleArtLayerCount(doc) {
    var count = 0;
    for (var i = 0; i < doc.artLayers.length; i++) {
        if (doc.artLayers[i].visible) {
            count++;
        }
    }
    for (var i = 0; i < doc.layerSets.length; i++) {
        if (doc.layerSets[i].visible) {
            count += getVisibleArtLayerCount(doc.layerSets[i]);
        }
    }
    return count;
}

var count = getVisibleArtLayerCount(doc);
$.writeln(count);

// 0
// と表示される