在 for 循环中使用 JSX 编写 Photoshop 脚本以更改每一层的填充颜色

Photoshop scripting with JSX in for loop to change fill color of each layer

所以,我正在使用 JSX 修改 PSD 文件中图层的填充颜色。我最终想循环所有图层,关闭除一个以外的所有图层的可见性,编辑该图层的填充颜色,另存为 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-- 向下移动集合吗?任何见解都会有所帮助。提前感谢这个总是乐于助人的社区。

这个var currentLayer = app.activeDocument.layers.index(i)

应该是这样的:var currentLayer = app.activeDocument.layers[i]

图层集合与数组几乎相同,从 0 开始,所以你做对了

正如 KienT 指出的那样,您需要对图层使用方括号。

创建一个 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);

}