#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);
}