在 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);
}
所以,我正在使用 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);
}