在 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 );
我知道可以删除大部分过多的描述符(比如如果你删除定义字体名称的描述符,图层将具有它原来的字体名称),所以我想可以将这个巨大的功能缩小到几行只改变特定字母的大小,但我没有尝试过。我猜算法会是这样的:
- 使用 DOM 获取字体大小和文本;
- 将文本拆分为块(如
from 0 to 1 + from 1 to last character
更改第一个字母的字体大小);
- 使用此功能为特定块设置参数;
如果文本图层中已经存在多种样式,则会出现问题:您必须使用 AM 解析图层内容,获取所有块的所有样式才能找到您要的样式参考...
我知道如何使用这样的代码在 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 );
我知道可以删除大部分过多的描述符(比如如果你删除定义字体名称的描述符,图层将具有它原来的字体名称),所以我想可以将这个巨大的功能缩小到几行只改变特定字母的大小,但我没有尝试过。我猜算法会是这样的:
- 使用 DOM 获取字体大小和文本;
- 将文本拆分为块(如
from 0 to 1 + from 1 to last character
更改第一个字母的字体大小); - 使用此功能为特定块设置参数;
如果文本图层中已经存在多种样式,则会出现问题:您必须使用 AM 解析图层内容,获取所有块的所有样式才能找到您要的样式参考...