Сценарии Photoshop: итерация списка всех слоев в наборе слоев выполняется очень медленно

Задача, которую я пытаюсь реализовать, очень проста:

Мне нужно получить список всех слоев (одноуровневых) в указанном наборе (группе) слоев и записать этот список в файл.

Код тоже прост (и работает):

function indexCurrent(document){
    var log = new File(indexLocation+document.name+'.js');
    alert("Collecting data");
    var images = document.layerSets.getByName("Images").layers;
    var imagesLength = images.length;

    var layers = [];

    alert("Iterating " + imagesLength + " layers");

    for(var jj = 0, jL = imagesLength; jj < jL; jj++){
        layers.push('\t\t\'' + images[jj].name + '\'');
    }

    alert("Writing " + layers.length + " layers");

    log.open('w');
    log.write('\n\t\'' + document.name + '\': [\n' );
    log.write(layers.join(",\n"));
    log.write('\n\t]\n');
    log.close();
}

Этот код работает, но для 150+ слоев между строками «Итерация» и «Запись» уходят часы.

Я прочитал здесь все связанные вопросы, но это не помогает.

Я уверен, что для такой простой задачи должен быть более эффективный способ.

Я использую Photoshop CS6 в Windows 7.

Спасибо.


person Roman Onufryk    schedule 24.10.2013    source источник
comment
Как вы выполняете этот код? Где?   -  person iamjustaprogrammer    schedule 24.05.2014


Ответы (2)


Я предлагаю вам попробовать переключиться с доступа к слоям через DOM на доступ к ним через диспетчер действий. Я почти уверен, что так вы получите лучшую производительность. Я ужасен с кодом диспетчера действий, поэтому не могу привести рабочий пример - просто погуглите :)

person Anna Forrest    schedule 25.10.2013

Для меня все работает нормально и быстро, но вы не указали, насколько велик исходный psd.

Anyhoo, взгляните сюда: поиск на уровне диспетчера действий

Я не могу запустить его, так как у меня старый добрый CS2. Йе-хар!

person Ghoul Fool    schedule 25.10.2013
comment
он говорит, что существует более 150 слоев, и я знаю, что столкнулся с проблемами производительности задолго до 150 слоев :) Я считаю, что даже 50 слоев в правильном PSD достаточно, чтобы быть заметно медленным. Я предполагаю, что у него нет названий слоев в его наборе слоев, поэтому я не уверен, насколько полезной будет эта ссылка. Но я почти уверен, что есть команда «переместить следующий слой», которая будет перемещаться по всем слоям в наборе с помощью диспетчера действий. Но вам нужно будет проверять после каждого «следующего шага», чтобы убедиться, что вы не вышли из желаемого набора слоев. - person Anna Forrest; 25.10.2013
comment
Извините, только что посмотрел на эту ссылку еще раз - полностью пропустил первую функцию в скрипте, которая, вероятно, именно то, что ему нужно :) Хорошая находка! - person Anna Forrest; 25.10.2013