Сценарий Photoshop с использованием JSX в цикле for для изменения цвета заливки каждого слоя

#javascript #scripting #jsx #photoshop

#javascript #сценарии #jsx #photoshop

Вопрос:

Итак, я пытаюсь изменить цвета заливки слоев в PSD-файле с помощью JSX. В конечном итоге я хочу зациклить все слои, отключив видимость для всех, кроме одного, отредактировать цвет заливки этого слоя, сохранить как PNG, а затем повторить для всех слоев и всех цветов в файле JSON. Я начинаю с малого, так как это моя первая попытка, но если ваше решение может помочь предотвратить мои неудачи с другими задачами, то это было бы с благодарностью. Вот что у меня есть (предупреждение выдается правильно, но строка 5 выдает ошибку 1302: нет такого элемента, ссылающегося на строку 5):

     var layerNum = app.activeDocument.layers.length
    alert(layerNum);
    var i;
    for (i=0;i<layerNum;i  ){
      var currentLayer = app.activeDocument.layers.index(i)
      var myColor = new SolidColor();
      //var RGB = HEXtoRGB(Y);
      myColor.rgb.red = RGB[255];
      myColor.rgb.green = RGB[0];
      myColor.rgb.blue = RGB[0];
      currentLayer.fill.color = myColor;
    }
 

Это потому, что коллекция слоев не начинается с 0? Должен ли я начать со layers.index(layerNum) и использовать i— для перемещения вниз по коллекции? Любая информация была бы полезна. Заранее спасибо этому всегда полезному сообществу.

Ответ №1:

Это var currentLayer = app.activeDocument.layers.index(i)

должно быть так: var currentLayer = app.activeDocument.layers[i]

Коллекции слоев практически такие же, как и массивы, начиная с 0, так что вы все сделали правильно

Ответ №2:

Как указывает КиенТ, вам нужно использовать квадратные скобки для слоев.

Также полезно создать переменную, которая является the app.activeDocument , поэтому вам не нужно вводить ее каждый раз. Перебирать слои назад (или вверх) легко — просто не забудьте убрать 1 от длины слоев. Вы также можете настроить, чтобы он игнорировал фон, заставив цикл начинаться с 1 вместо 0. Вы также можете изменить видимость слоев с true на false (вкл. и выкл.) по ходу работы.

 // call the source document
var srcDoc = app.activeDocument;

var layerNum = srcDoc.layers.length;
// alert(layerNum);

for (var i = layerNum -1; i >= 0; i--)
{
  var currentLayer = srcDoc.layers[i];
  var myColor = new SolidColor;

  // Select the layers as you go 
  srcDoc.activeLayer = srcDoc.artLayers[i];

  // switch layer visibility to on
  srcDoc.visible = true;

  myColor.rgb.red = 255;
  myColor.rgb.green = 0;
  myColor.rgb.blue = 0;

  app.activeDocument.selection.fill(myColor, ColorBlendMode.NORMAL, 100, false);

}