javascript - Photoshop 脚本 - 更改特定的文本图层内容
问题描述
我有一个打开模板 psd 文件的 Photoshop 脚本文件:
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');
这会将名为The quick brown fox的Text Layer
MainTitle
的文本内容设置为。注意:如果您的文档/模板包含多个命名的文本层
MainTitle
,那么它们的内容都会更改为The quick brown fox。
changeTextLayerContent
功能:
该函数首先利用
for
语句循环遍历 Photoshop图层面板中列出的每个顶级图层或组。然后检查图层是否
typename
为ArtLayer
.如果它
typename
是ArtLayer
它随后然后检查层是否name
等于您提供的layerNamekind
以及层是否等于LayerKind.TEXT
。如果这些条件检查都为真,那么它才会通过以下行为文本层设置新的文本内容:layerRef.textItem.contents = newTextString;
或者,如果图层
typename
不是 a,ArtLayer
那么它必须是 aLayerSet
(即图层组)。在这种情况下,函数通过以下行重新调用自身:changeTextLayerContent(layerRef, layerName, newTextString);
但是,这一次它传递了
layerRef
作为第一个参数,这导致函数循环遍历组/集中的所有层并检查它们。
推荐阅读
- google-tag-manager - Google 跟踪代码管理器变量作为 [Object object] 传递
- c++ - 文件的 ACE 数量 - 文件属性的安全选项卡中只有 9 个成员,但它从 ACL 返回 13 个 ACE
- reactjs - 如何通过react js检查mongodb现有文档中是否存在字段值?
- python - Celery:如何在不超时父任务的情况下链接长时间运行的任务?
- html - Html Sections 或 Divs 在列中没有相互连接?
- angular - node_modules/ngx-toastr/toastr/toast-noanimation.component.d.ts(19,9)
- sql - 如何根据不同的类型划分记录?
- c# - 命名 .NET 程序集时的商标注意事项
- delphi - DBGridEh 字段 LookupParams 属性不会将数据发布到数据库
- azure-functions - 使用 context.CallHttpAsyn 时“检测到多线程执行”