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

时间:2019-02-14 06:37:04

标签: javascript photoshop

我知道如何使用这样的代码在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 :(得分:0)

据我所知,没有简单的方法可以做到这一点。首先,使用DOM是不可能的,因此请忘记使用textItem.contents。使用AM时,棘手的部分是用于文本层的AM代码确实很精确。每次更改内容时,它都会为文本的所有“块”定义所有可能的参数,例如,在这种情况下,我使用Gudea字体编写了一个35像素高的文本层,并且将一个字母更改为70像素: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解析图层内容,获取所有块的所有样式以找到您要引用的样式...