如何在 photoshop 中循环分组?
How to loop on groups in photoshop?
我有这段代码,它可以工作,但它看不到图层组内的文本,也没有迭代它。
var itemsAry=['emil','lardtub','100','jsbus', 'rasmus','null','1000000'];
var layers = app.activeDocument.layers;
for (var i =0; i<layers.length; i++) {
if (layers[i].kind == "LayerKind.TEXT") {
layers[i].textItem.contents=itemsAry[i]
}
}
虽然 looping through all layers in a document is on SO,但从循环多个层到循环遍历其中包含组的 psd 的尴尬可能会令人困惑。
基本上,您需要一个递归函数来遍历组。
请注意,确保在更改文本时关闭脚本开头的所有对话框。否则,您必须验证每个文本更改确认。
// Switch off any dialog boxes
displayDialogs = DialogModes.NO; // OFF
var itemsAry=['emil','lardtub','100','jsbus', 'rasmus','null','1000000'];
// group layer vegetables
var theLayers = collectAllLayers(app.activeDocument, 0);
// function collect all layers
function collectAllLayers (theParent, level)
{
for (var m = theParent.layers.length - 1; m >= 0; m--)
{
var theLayer = theParent.layers[m];
// apply the function to layersets;
if (theLayer.typename == "ArtLayer")
{
if (theLayer.kind == "LayerKind.TEXT")
{
theLayer.textItem.contents=itemsAry[m];
}
}
else
{
collectAllLayers(theLayer, level + 1)
}
}
}
// Make sure dialogs back on
displayDialogs = DialogModes.ALL; // ON
我有这段代码,它可以工作,但它看不到图层组内的文本,也没有迭代它。
var itemsAry=['emil','lardtub','100','jsbus', 'rasmus','null','1000000'];
var layers = app.activeDocument.layers;
for (var i =0; i<layers.length; i++) {
if (layers[i].kind == "LayerKind.TEXT") {
layers[i].textItem.contents=itemsAry[i]
}
}
虽然 looping through all layers in a document is on SO,但从循环多个层到循环遍历其中包含组的 psd 的尴尬可能会令人困惑。
基本上,您需要一个递归函数来遍历组。
请注意,确保在更改文本时关闭脚本开头的所有对话框。否则,您必须验证每个文本更改确认。
// Switch off any dialog boxes
displayDialogs = DialogModes.NO; // OFF
var itemsAry=['emil','lardtub','100','jsbus', 'rasmus','null','1000000'];
// group layer vegetables
var theLayers = collectAllLayers(app.activeDocument, 0);
// function collect all layers
function collectAllLayers (theParent, level)
{
for (var m = theParent.layers.length - 1; m >= 0; m--)
{
var theLayer = theParent.layers[m];
// apply the function to layersets;
if (theLayer.typename == "ArtLayer")
{
if (theLayer.kind == "LayerKind.TEXT")
{
theLayer.textItem.contents=itemsAry[m];
}
}
else
{
collectAllLayers(theLayer, level + 1)
}
}
}
// Make sure dialogs back on
displayDialogs = DialogModes.ALL; // ON