Photoshop脚本 文本与字体
文字图层通过 layer.textItem 对象(TextItem)访问所有文本属性。ExtendScript 中先创建普通图层再设为文字类型,或直接通过 textItem 操作既有文字图层。
判断与获取文本图层
javascript
var doc = app.activeDocument;
for (var i = 0; i < doc.artLayers.length; i++) {
var layer = doc.artLayers[i];
if (layer.kind === LayerKind.TEXT) {
alert("文字图层: " + layer.name);
alert("内容: " + layer.textItem.contents);
}
} 创建文本图层
ExtendScript 中创建文本图层需要先创建普通图层,然后通过 textItem 写入内容:
javascript
var doc = app.activeDocument;
var layer = doc.artLayers.add();
layer.kind = LayerKind.TEXT;
layer.name = "标题";
var ti = layer.textItem;
ti.contents = "Hello World";
ti.position = [UnitValue("100 px"), UnitValue("100 px")]; TextItem 属性
内容与字体
| 属性 | 类型 | 说明 |
|---|---|---|
textItem.contents | string | 文本内容(可读写) |
textItem.font | string | PostScript 字体名称 |
textItem.size | UnitValue | 字号 |
textItem.color | SolidColor | 文本颜色 |
textItem.position | Array | 位置 [X, Y] UnitValue 数组 |
间距与对齐
| 属性 | 类型 | 说明 |
|---|---|---|
textItem.leading | UnitValue | 行距 |
textItem.tracking | number | 字距(-1000~10000) |
textItem.autoKerning | AutoKernType | 自动字距:OPTICAL / METRICS / MANUAL |
textItem.useAutoLeading | boolean | 是否自动行距 |
textItem.autoLeadingAmount | number | 自动行距百分比 |
textItem.justification | Justification | 对齐方式 |
textItem.direction | Direction | 文字方向 |
样式
| 属性 | 类型 | 说明 |
|---|---|---|
textItem.fauxBold | boolean | 伪粗体 |
textItem.fauxItalic | boolean | 伪斜体 |
textItem.underline | UnderlineType | 下划线 |
textItem.strikeThru | StrikeThruType | 删除线 |
textItem.baselineShift | UnitValue | 基线偏移 |
textItem.horizontalScale | number | 水平缩放 0–1000 |
textItem.verticalScale | number | 垂直缩放 0–1000 |
textItem.capitalization | TextCase | 大小写:NORMAL / ALLCAPS / SMALLCAPS |
textItem.ligatures | boolean | 连字 |
段落
| 属性 | 类型 | 说明 |
|---|---|---|
textItem.firstLineIndent | UnitValue | 首行缩进 |
textItem.spaceBefore | UnitValue | 段前间距 |
textItem.spaceAfter | UnitValue | 段后间距 |
textItem.kind | TextType | POINTTEXT / PARAGRAPHTEXT |
textItem.width | UnitValue | 文本框宽度(段落文本) |
textItem.height | UnitValue | 文本框高度(段落文本) |
变形
| 属性 | 说明 |
|---|---|
textItem.warpStyle | WarpStyle 变形样式:ARC、ARCH、FLAG、FISH 等 |
textItem.warpBend | 弯曲度 -100~100 |
textItem.warpHorizontalDistortion | 水平扭曲 -100~100 |
textItem.warpVerticalDistortion | 垂直扭曲 -100~100 |
textItem.warpDirection | 方向:HORIZONTAL / VERTICAL |
设置字体
使用 PostScript 字体名称,通过 app.fonts 查询:
javascript
// 列出所有可用字体
for (var i = 0; i < app.fonts.length; i++) {
alert(app.fonts[i].postScriptName);
}
// 设置字体
var ti = doc.artLayers[0].textItem;
ti.font = "ArialMT"; // Arial Regular
ti.font = "Arial-BoldMT"; // Arial Bold
ti.font = "MicrosoftYaHei"; // 微软雅黑 字体名称通常由 app.fonts[i].postScriptName 获取。
设置颜色
javascript
var ti = layer.textItem;
var red = new SolidColor();
red.rgb.hexValue = "FF0000";
ti.color = red;
// 或通过 RGB 数值
var blue = new SolidColor();
blue.rgb.red = 0;
blue.rgb.green = 100;
blue.rgb.blue = 255;
ti.color = blue; 基础示例
创建文字图层并设置内容与样式:
javascript
var doc = app.activeDocument;
if (!doc) {
alert("请打开一个文档");
} else {
var layer = doc.artLayers.add();
layer.kind = LayerKind.TEXT;
layer.name = "标题";
layer.textItem.contents = "欢迎访问我们的网站";
layer.textItem.font = "MicrosoftYaHei";
layer.textItem.size = UnitValue("48 pt");
layer.textItem.justification = Justification.CENTER;
layer.textItem.tracking = 50;
var c = new SolidColor();
c.rgb.hexValue = "1E1E1E";
layer.textItem.color = c;
alert("文字图层已创建:" + layer.textItem.contents);
} 修改现有文本图层
遍历文档中所有文字图层并统一修改样式:
javascript
var doc = app.activeDocument;
for (var i = 0; i < doc.artLayers.length; i++) {
var layer = doc.artLayers[i];
if (layer.kind !== LayerKind.TEXT) continue;
var ti = layer.textItem;
alert("修改: " + layer.name + " — \"" + ti.contents + "\"");
ti.font = "ArialMT";
ti.size = UnitValue("24 pt");
var red = new SolidColor();
red.rgb.hexValue = "C81E1E";
ti.color = red;
ti.fauxBold = true;
} 创建路径与形状
javascript
// 将文字轮廓转为工作路径
layer.textItem.createPath();
// 将文字转为形状图层(路径+填充)
layer.textItem.convertToShape(); 综合示例
创建标题—副标题—正文的文本层次:
javascript
var doc = app.activeDocument;
if (!doc) { alert("请打开一个文档"); } else {
function makeText(name, content, font, size, colorHex, justification) {
var layer = doc.artLayers.add();
layer.kind = LayerKind.TEXT;
layer.name = name;
var ti = layer.textItem;
ti.contents = content;
ti.font = font;
ti.size = UnitValue(size + " pt");
ti.justification = justification || Justification.LEFT;
var c = new SolidColor();
c.rgb.hexValue = colorHex;
ti.color = c;
return layer;
}
// 标题
makeText("标题", "Photoshop 脚本入门", "MicrosoftYaHei", 64, "1E1E1E", Justification.CENTER);
// 副标题
makeText("副标题", "用代码控制设计工具", "MicrosoftYaHei", 32, "666666", Justification.CENTER);
// 正文
var body = makeText("正文", "Adobe Photoshop 提供了丰富的脚本接口。\n你可以用 JavaScript 自动化几乎所有手动操作。", "MicrosoftYaHei", 18, "3C3C3C", Justification.CENTER);
body.textItem.leading = UnitValue("30 pt");
body.textItem.tracking = 10;
alert("文字层次创建完成");
} 小结
layer.kind === LayerKind.TEXT判断文本图层layer.textItem访问 TextItem 对象contents、font、size、color、justification是常用属性- 字体使用 PostScript 名称(如
"ArialMT"、"MicrosoftYaHei"),从app.fonts查询 - 颜色使用
SolidColor对象,通过rgb.hexValue或rgb.red/green/blue设置 createPath()转为工作路径,convertToShape()转为形状图层- 多行文本用
\n换行,leading控制行距