首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在for循环中使用JSX编写Photoshop脚本以更改每个图层的填充颜色

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

Stack Overflow用户
提问于 2020-12-12 23:24:06
回答 2查看 485关注 0票数 0

因此,我正在使用JSX修改PSD文件中图层的填充颜色。我最终想要循环所有图层,关闭所有图层的可见性,只保留一个图层,编辑该图层的填充颜色,另存为PNG,然后对JSON文件中的所有图层和所有颜色重复上述操作。我从小事做起,因为这是我的第一次尝试,但如果你的解决方案可以帮助我在其他任务中抢先一步,那么我将非常感激。下面是我所拥有的(alert正确提示,但是第5行收到错误1302:没有这样的元素引用第5行):

代码语言:javascript
运行
复制
    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--向下移动集合吗?任何洞察力都会有所帮助。提前感谢这个总是有用的社区。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-12 23:31:25

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

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

Layers集合与数组非常相似,都是从0开始,所以你做得很对

票数 1
EN

Stack Overflow用户

发布于 2020-12-14 21:36:48

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

此外,创建一个app.activeDocument变量也很有用,这样您就不必每次都键入该变量。向后(或向上)循环图层很容易-只需记住将图层长度减去1即可。您还可以通过使循环从1开始而不是从0开始来调整,使其忽略背景。您还可以将图层可见性从true调整为false (打开和关闭)。

代码语言:javascript
运行
复制
// 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);

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65266601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档