Скрипт Photoshop для перемещения текстового слоя через действия
Я разрабатываю сотни плакатов, каждый из которых имеет разный текст, но все они должны быть в одинаковом положении X,Y - исходной точкой является верхний левый угол: X= 213 px и Y= 41 px
Некоторые из них немного сбиты с толку, и я хотел бы исправить их быстро и с помощью автоматизации.
Достаточно легко создать действие для преобразования текста, но поскольку текстовое содержимое отличается от файла к файлу, я не могу автоматизировать эту часть.
Поэтому ищем скрипт, который по сути выбирает текстовый слой. Во всех этих документах есть только один текстовый слой, поэтому что-то вроде "function: gettextlayer", а затем выберите этот слой на панели слоев.
Я могу сделать бит преобразования с помощью автоматизации действий оттуда.
Я почесал голову на этом и вырыл всюду.
2 ответа
Если текстовый слой никогда не находится в наборе слоев, вы можете использовать следующий фрагмент, чтобы найти и переместить его...
var doc = app.activeDocument;
for (var i = 0; i < doc.layers.length; i++) {
var lyr = doc.layers[i];
if (lyr.kind == LayerKind.TEXT) {
//bounds order is top, left, bottom right
var dx = 213 - lyr.bounds[0].as("px") ;
var dy = 41 - lyr.bounds[1].as("px");
lyr.translate(dx, dy);
}
}
Помните, что границы относятся к текстовому полю, а не к самому тексту. Так, в частности, в случае текстового поля абзаца это может быть не то, что вы ожидаете. Если вам нужны границы самого текста, вам нужно растеризовать копию текстового слоя и вместо этого выполнить математику на этом слое.
Если он может быть в наборе слоев, он становится немного сложнее, потому что вы должны рекурсивно просматривать каждый набор слоев, чтобы найти его. Если только вы не идете, получите копию файла stdlib.js из xtools. Потрясающая библиотека, где можно повеселиться, если вы собираетесь делать какие-либо сценарии. Когда у вас есть этот файл, вы можете просто использовать...
#include "stdlib.js"
var doc = app.activeDocument;
var lyr = Stdlib.findLayerByProperty(doc, "kind", LayerKind.TEXT, false);
var dx = 213 - lyr.bounds[0].as("px") ;
var dy = 41 - lyr.bounds[1].as("px");
lyr.translate(dx, dy);
Остальные свойства текста могут быть доступны из свойства textItem слоя, как только вы его найдете. Например:
lyr.textItem.contents = "some new text";
lyr.textItem.font = "fontname";
См. Javascript Reference pdf в вашем каталоге установки Photoshop для получения дополнительной информации.
Вы можете получить позицию из textLayers и обычных, подобных этому
function getPosition(layer) {
if (layer.textItem) {
var X = parseFloat(layer.textItem.position[0]);
var Y = parseFloat(layer.textItem.position[0]);
} else {
var X = parseFloat(layer.bounds[0]);
var Y = parseFloat(layer.bounds[1]);
}
return {x:X,y:Y}
}