Это будет необходимо циклически по всем слоям (включая слои в Группы слоев ), чтобы найти ваше конкретное имя Текстовый слой (например, 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'
- имя Text Layer для изменения его содержимого.. '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
в качестве первого аргумента, что заставляет функцию зацикливаться на всех слоях в группе./ установите и проверьте их тоже.