在 Photoshop 中使用 javascript 修改文本项的内容

Use javascript in Photoshop to modify the contents of a text item

我知道如何使用这样的代码在 Photoshop 中设置文本项的内容

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

但是,是否可以仅修改其部分内容并应用格式。例如在作品 "Whosebug" 中我只想 select 第一个字母并使字体为 30px 并保持其余不变?

据我所知,没有简单的方法可以做到这一点。首先,使用 DOM 是不可能的,所以忘记使用 textItem.contents。使用 AM 的棘手部分是文本层的 AM 代码非常精确。每次更改内容时,它都会为所有 "blocks" 文本定义所有可能的参数,例如,在这种情况下,我有一个用 Gudea 字体编写的 35px 高度文本层,我将一个字母更改为 70px:https://pastebin.com/XLP64azz 您可能会看到那里有很多垃圾,文本层现在被视为 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 解析图层内容,获取所有块的所有样式才能找到您要的样式参考...