You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Photoshop脚本为文本添加描边报错:undefined is not an object

问题分析与修复

出错根源

  1. 提前栅格化文本层:你在设置描边前就对文本层执行了栅格化操作,虽然栅格化后图层也能加描边,但这并非必要操作,更核心的问题是——
  2. 未初始化描边样式对象:Photoshop脚本中,图层默认不存在描边样式,直接访问layerStyle.stroke会返回undefined,因为这个样式对象还未被创建。必须先通过layerStyle.add(Style.STROKE)添加描边样式,才能修改它的各项属性。

修正后的代码

#target photoshop

var textArray = ["Hello"];
var fontSize = 13;
var fontFamily = "KomikaAxis";
var strokeSize = 10;

for (var i = 0; i < textArray.length; i++) {
    var currentText = textArray[i];
    
    var textLayer = app.activeDocument.artLayers.add();
    textLayer.kind = LayerKind.TEXT;
    textLayer.textItem.contents = currentText;
    
    textLayer.textItem.font = fontFamily;
    textLayer.textItem.size = fontSize;
    
    var textColor = new SolidColor();
    textColor.rgb.red = 255;
    textColor.rgb.green = 255;
    textColor.rgb.blue = 255;
    textLayer.textItem.color = textColor;
    
    textLayer.textItem.position = [541, 1144];

    // 先添加描边样式到图层样式集合
    textLayer.layerStyle.add(Style.STROKE);
    // 获取描边样式对象,简化后续调用
    var strokeStyle = textLayer.layerStyle.stroke;
    
    strokeStyle.enabled = true;
    strokeStyle.size = strokeSize;
    strokeStyle.color = new SolidColor();
    strokeStyle.color.rgb.hexValue = '000000';
    strokeStyle.position = StrokeLocation.CENTER;
    strokeStyle.blendMode = BlendMode.NORMAL;

    // 若确实需要栅格化,需等样式设置完成后执行
    // textLayer.rasterize(RasterizeType.ALLLAYERS);
}

重点说明

  • 移除了过早的栅格化操作:文本层可直接应用图层样式,无需先转换为像素层。如果后续必须栅格化,要放在样式设置完成之后。
  • 新增textLayer.layerStyle.add(Style.STROKE):这是创建描边样式的关键步骤,没有它就无法安全访问stroke的属性。
  • 将描边样式赋值给变量strokeStyle,避免重复调用textLayer.layerStyle.stroke,让代码更简洁易读。

内容的提问来源于stack exchange,提问作者Fairoozino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:34:56