我有一个 photoshop 脚本文件,它打开了一个模板 psd 文件:
var fileRef = new File("z:psd.psd")
var docRef = app.open (fileRef)
打开后,我想要将名为"LAYER1"的特定层的文本更改为"TEST"的代码。
我已经研究并进行了许多测试,但我遇到了未定义变量的问题和错误。
在更改文本内容之前,有必要遍历所有图层(包括图层组中的图层(以找到特定的命名文本图层(例如LAYER1(。为此,我建议在脚本中添加自定义函数。
下面的代码示例将名为LAYER1的文本层的文本内容更改为Hello World。
var fileRef = new File('z:psd.psd');
var docRef = app.open(fileRef);
/**
* Change text content of a specific named Text Layer to a new text string.
*
* @param {Object} doc - A reference to the document to change.
* @param {String} layerName - The name of the Text Layer to change.
* @param {String} newTextString - New text content for the Text Layer.
*/
function changeTextLayerContent(doc, layerName, newTextString) {
for (var i = 0, max = doc.layers.length; i < max; i++) {
var layerRef = doc.layers[i];
if (layerRef.typename === "ArtLayer") {
if (layerRef.name === layerName && layerRef.kind === LayerKind.TEXT) {
layerRef.textItem.contents = newTextString;
}
} else {
changeTextLayerContent(layerRef, layerName, newTextString);
}
}
}
changeTextLayerContent(docRef, 'LAYER1', 'Hello World');
解释
调用函数:
上面的最后一行代码如下:
changeTextLayerContent(docRef, 'LAYER1', 'Hello World');
是调用
changeTextLayerContent
函数的位置。我们将三个参数传递给函数,如下所示:
docRef
- 这是要在其中更改其图层的文档的对象引用。'LAYER1'
- 这是用于更改其内容的文本图层的名称。'Hello World'
- 这是要应用于文本层(在本例中为名为LAYER1
的文本层(的新文本字符串(即内容(。
假设我们要按如下方式调用该函数:
changeTextLayerContent(docRef, 'MainTitle', 'The quick brown fox');
这会将名为
MainTitle
的文本图层的文本内容设置为快速棕色狐狸。注意:如果您的文档/模板包含多个名为
MainTitle
的文本图层,则它们的内容都将更改为快速棕色狐狸。
changeTextLayerContent
功能:
该函数首先利用
for
语句循环访问 Photoshop 的图层调色板中列出的每个顶级图层或组。然后,它会检查
typename
图层是否ArtLayer
。如果其
typename
ArtLayer
则随后会检查图层name
等于您提供的layerName以及图层kind
是否等于LayerKind.TEXT
。如果这些条件检查都为真,则只有这样,它才会通过以下行为文本图层设置新的文本内容:layerRef.textItem.contents = newTextString;
或者,如果图层
typename
不是ArtLayer
则它必须是LayerSet
(即图层组(。在这种情况下,函数通过行读取重新调用自身:changeTextLayerContent(layerRef, layerName, newTextString);
但是,这次它将
layerRef
作为第一个参数传递,这会导致函数遍历组/集中的所有层并检查它们。