Используйте JavaScript в Photoshop для изменения содержимого текстового элемента - PullRequest
0 голосов
/ 14 февраля 2019

Я знаю, как установить содержимое текстового элемента в Photoshop, используя такой код

var al = doc.activeLayer;
if(al.kind == LayerKind.TEXT) {
    //get the textItem
    var ti = al.textItem;
    //change contents
   ti.contents = "stackoverflow";
}

Однако возможно изменить только часть его содержимого и применить форматирование.Например, в работе «stackOverflow» я просто хочу выбрать первую букву и сделать шрифт 30px, а остальные оставить без изменений?

1 Ответ

0 голосов
/ 14 февраля 2019

Нет простого способа сделать это, насколько мне известно.Прежде всего, это невозможно с DOM, поэтому забудьте об использовании textItem.contents.С AM сложнее то, что код AM для текстовых слоев действительно точен.Каждый раз, когда вы что-то меняете, он определяет все возможные параметры для всех «блоков» текста, например, в этом случае у меня был текстовый слой высотой 35px, написанный шрифтом Gudea, и я изменил одну букву на 70px: https://pastebin.com/XLP64azz Youможет видеть, что там много мусора, и текстовый слой теперь рассматривается как 3 отдельных блока: буквы от 0 до 5 (строки 64-65: stack), от 5 до 6 (строки 217-218: O) и с 6 до 14 (строки 281-282: verflow).Чуть ниже каждого блока есть строки, которые устанавливают размер, например

desc62.putUnitDouble( cTID('Sz  '), cTID('#Pxl'), 35.000000 );
desc62.putUnitDouble( sTID('impliedFontSize'), cTID('#Pxl'), 35.000000 );

Я знаю, что можно удалить большинство лишних дескрипторов (например, если вы удалите дескрипторы, которые определяют имя шрифта, слойбудет иметь имя шрифта, которое у него было изначально), так что я думаю, что можно уменьшить эту огромную функцию до нескольких строк, которые изменяют только размер конкретной буквы, но я этого не пробовал.Я думаю, алгоритм будет выглядеть следующим образом:

  1. получить размер шрифта и текст с помощью DOM;
  2. разделить текст на блоки (например, from 0 to 1 + from 1 to last character, чтобы изменить размер шрифта для первой буквы));
  3. используйте эту функцию для установки параметров для определенных блоков;

И будут проблемы, если в текстовом слое уже существует несколько стилей: у вас будетчтобы проанализировать содержимое слоя с помощью AM, получите все стили всех блоков, чтобы найти тот, на который вы ссылаетесь ...

...