Photoshop 脚本 - 更改特定文本图层内容

Posted

技术标签:

【中文标题】Photoshop 脚本 - 更改特定文本图层内容【英文标题】:Photoshop Script - Change specific text layer contents 【发布时间】:2018-11-07 12:15:20 【问题描述】:

我有一个打开模板 psd 文件的 photoshop 脚本文件:

var fileRef = new File("z:\psd.psd")
var docRef = app.open (fileRef)

一旦打开,我想要将名为“LAYER1”的特定层的文本更改为“TEST”的代码。

我已经研究并进行了许多测试,但我遇到了未定义变量的问题和错误。

【问题讨论】:

【参考方案1】:

有必要遍历所有图层(包括图层组中的图层),以找到您特定的命名文本图层(例如LAYER1) 在其文本内容可以更改之前。为此,我建议在您的脚本中添加一个自定义函数。

以下代码示例会将名为 LAYER1Text Layer(s) 的文本内容更改为 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' - 这是应用于 Text Layer 的新文本字符串(即内容)(在本例中,应用于名为 LAYER1Text Layer)。

    假设我们要调用函数如下:

    changeTextLayerContent(docRef, 'MainTitle', 'The quick brown fox');
    

    这会将名为 MainTitleText Layer 的文本内容设置为 The quick brown fox

    注意:如果您的文档/模板包含多个名为 MainTitle文本层,那么它们的内容都会更改为 The quick brown fox

changeTextLayerContent 函数:

    该函数首先利用for statement 循环遍历 Photoshop 的Layers Palette 中列出的每个***LayerGroup em>

    然后检查层typename 是否为ArtLayer

    如果它的typenameArtLayer,它随后会检查层name 是否等于您提供的layerName 以及层kind 是否等于LayerKind.TEXT。如果这些条件检查都为真,那么它才会通过以下行为 Text Layer 设置新的文本内容:

    layerRef.textItem.contents = newTextString;
    

    或者,如果层 typename 不是 ArtLayer,那么它必须是 LayerSet(即层组)。在这种情况下,函数通过以下行重新调用自身:

    changeTextLayerContent(layerRef, layerName, newTextString); 
    

    但是,这一次它将layerRef 作为第一个参数传递,这导致函数循环遍历组/集中的所有层并检查它们。


【讨论】:

是的,非常感谢您的帮助,非常感谢。

以上是关于Photoshop 脚本 - 更改特定文本图层内容的主要内容,如果未能解决你的问题,请参考以下文章

编辑文本图层 - Photoshop 脚本

获取文本图层阴影参数(ExtendScript CS5、Photoshop 脚本)

Ae:文本图层操作基础

在短时间内显示文本图层

通过 Photoshop 中的脚本更改特定文本的字体

Photoshop 脚本 - 获取文档位深度