Сценарий Photoshop - изменение содержимого определенного текстового слоя - PullRequest
0 голосов
/ 29 мая 2018

У меня есть файл сценария photoshop, который открывает файл psd шаблона:

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

После того, как это будет открыто, я хотел бы, чтобы код, который изменяет текст определенного слоя с именем "LAYER1" на "TEST"".

Я исследовал и провел множество тестов, но у меня возникают проблемы и ошибки с неопределенными переменными.

1 Ответ

0 голосов
/ 29 мая 2018

Это будет необходимо циклически по всем слоям (включая слои в Группы слоев ), чтобы найти ваше конкретное имя Текстовый слой (например, 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');

Объяснение

Вызов функции:

  1. В последней строке кода выше, которая гласит:

    changeTextLayerContent(docRef, 'LAYER1', 'Hello World');
    

    , где вызывается функция changeTextLayerContent.

    Мы передаем три аргумента функции следующим образом:

    • docRef - это ссылка на объект документа, в котором нужно изменить его слои.
    • 'LAYER1' - имя Text Layer для изменения его содержимого..
    • 'Hello World' - это новая текстовая строка (то есть содержимое), применяемая к текстовому слою (в данном случае к текстовому слою с именем LAYER1).
  2. Допустим, мы должны были вызвать функцию следующим образом:

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

    Это установит текстовое содержимое Текстовый слой с именем MainTitle до Быстрая коричневая лиса .

    Примечание: Если ваш документ / шаблон включал несколько Текстовые слои с именем MainTitle тогда все они изменили бы свое содержимое на Быстрая коричневая лиса .

Функция changeTextLayerContent:

  1. Функция сначала использует оператор for для циклического перебора каждого верхнего уровня Слой или Группа , который указан в Photoshop Палитра слоев.

  2. Затем проверяется, имеет ли слой typename значение ArtLayer.

    • Если его typenameэто ArtLayer, затем он затем проверяет слои name равные layerName , которые вы предоставили, и равняются ли слои kind LayerKind.TEXT.Если обе эти условные проверки верны, только тогда он установит новое текстовое содержимое для Текстовый слой через строку, которая гласит:

      layerRef.textItem.contents = newTextString;
      
    • В качестве альтернативы,если слои typename не являются ArtLayer, то это должен быть LayerSet (то есть группа слоев).В этом сценарии функция повторно вызывается через строку:

      changeTextLayerContent(layerRef, layerName, newTextString); 
      

      Однако на этот раз она передает layerRef в качестве первого аргумента, что заставляет функцию зацикливаться на всех слоях в группе./ установите и проверьте их тоже.


...