Скрипт Photoshop — изменение содержимого определенного текстового слоя

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

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

Как только это будет открыто, мне нужен код, который изменяет текст определенного слоя с именем «LAYER1» на «TEST».

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


person sam    schedule 28.05.2018    source источник


Ответы (1)


Это необходимо будет перебрать все слои (включая слои в группах слоев), чтобы найти конкретное имя текстовый слой (например, СЛОЙ1 ), прежде чем его текстовое содержимое может быть изменено. Для этого я рекомендую добавить пользовательскую функцию в ваш скрипт.

В следующем примере кода текстовое содержимое текстовых слоев с именем 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 - which is a object reference of the document in which to change its layers.
    • 'LAYER1' — имя текстового слоя для изменения его содержимого.
    • '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 в качестве первого аргумента, что заставляет функцию перебирать все слои в группе/наборе и проверять их.


person RobC    schedule 29.05.2018
comment
Да, это большое спасибо за вашу помощь, большое спасибо. - person sam; 30.05.2018