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.contentsstring文本内容(可读写)
textItem.fontstringPostScript 字体名称
textItem.sizeUnitValue字号
textItem.colorSolidColor文本颜色
textItem.positionArray位置 [X, Y] UnitValue 数组

间距与对齐

属性类型说明
textItem.leadingUnitValue行距
textItem.trackingnumber字距(-1000~10000)
textItem.autoKerningAutoKernType自动字距:OPTICAL / METRICS / MANUAL
textItem.useAutoLeadingboolean是否自动行距
textItem.autoLeadingAmountnumber自动行距百分比
textItem.justificationJustification对齐方式
textItem.directionDirection文字方向

样式

属性类型说明
textItem.fauxBoldboolean伪粗体
textItem.fauxItalicboolean伪斜体
textItem.underlineUnderlineType下划线
textItem.strikeThruStrikeThruType删除线
textItem.baselineShiftUnitValue基线偏移
textItem.horizontalScalenumber水平缩放 0–1000
textItem.verticalScalenumber垂直缩放 0–1000
textItem.capitalizationTextCase大小写:NORMAL / ALLCAPS / SMALLCAPS
textItem.ligaturesboolean连字

段落

属性类型说明
textItem.firstLineIndentUnitValue首行缩进
textItem.spaceBeforeUnitValue段前间距
textItem.spaceAfterUnitValue段后间距
textItem.kindTextTypePOINTTEXT / PARAGRAPHTEXT
textItem.widthUnitValue文本框宽度(段落文本)
textItem.heightUnitValue文本框高度(段落文本)

变形

属性说明
textItem.warpStyleWarpStyle 变形样式:ARCARCHFLAGFISH
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 对象
  • contentsfontsizecolorjustification 是常用属性
  • 字体使用 PostScript 名称(如 "ArialMT""MicrosoftYaHei"),从 app.fonts 查询
  • 颜色使用 SolidColor 对象,通过 rgb.hexValuergb.red/green/blue 设置
  • createPath() 转为工作路径,convertToShape() 转为形状图层
  • 多行文本用 \n 换行,leading 控制行距