Ответ 1
Единственное, о чем я могу подумать, - попытаться пропустить отдельные слои в app.activeDocument.layers
, который содержит все слои и группы. Когда вы это сделаете, вы заметите, что сгруппированные слои по-прежнему сохраняют свое первоначальное свойство visible
, но скрыты, потому что их родительская группа скрыта.
#target photoshop
var myLayers = app.activeDocument.layers;
var myLayersLength = myLayers.length;
for (var i=0; i<myLayersLength; i++) {
myLayers[i].visible = false;
}
EDIT: Итак, я протестировал это решение в файле размером 400 Мбайт с 50 слоями, и он работал серьезно менее чем за секунду. Вы уверены, что проблема связана с Photoshop?
Если вам нужно выполнить итерацию каждого отдельного слоя и дочернего слоя для выполнения действия, вы можете сделать это рекурсивно:
#target photoshop
var doc = app.activeDocument;
findLayers(doc);
function findLayers(set) {
for (var i=0; i<set.layerSets.length; i++) {
//recursive call
findLayers(set.layerSets[i]);
//iterate sub-layers and hide
for (var j=0; j<set.layerSets[i].layers.length; j++) {
set.layerSets[i].layers[j].visible = false;
}
}
//hide top-level layers
for (var l=0; l<set.layers.length; l++) {
set.layers[l].visible = false;
}
}
Это займет немного больше времени, ~ 20 секунд на моей машине, но он попадет в каждый слой в документе.
ПРИМЕЧАНИЕ. Я также проверил ваши исходные сценарии из вопроса, и они не работают с негрупповыми слоями, потому что вы выполняете итерацию через document.layerSets
вместо document.layers