因此,我正在使用JSX修改PSD文件中图层的填充颜色。我最终想要循环所有图层,关闭所有图层的可见性,只保留一个图层,编辑该图层的填充颜色,另存为PNG,然后对JSON文件中的所有图层和所有颜色重复上述操作。我从小事做起,因为这是我的第一次尝试,但如果你的解决方案可以帮助我在其他任务中抢先一步,那么我将非常感激。下面是我所拥有的(alert正确提示,但是第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--向下移动集合吗?任何洞察力都会有所帮助。提前感谢这个总是有用的社区。
发布于 2020-12-12 23:31:25
此var currentLayer = app.activeDocument.layers.index(i)
应该是这样:var currentLayer = app.activeDocument.layers[i]
Layers集合与数组非常相似,都是从0开始,所以你做得很对
发布于 2020-12-14 21:36:48
正如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);
}
https://stackoverflow.com/questions/65266601
复制相似问题