Photoshop脚本为文本添加描边报错:undefined is not an object
问题分析与修复
出错根源
- 提前栅格化文本层:你在设置描边前就对文本层执行了栅格化操作,虽然栅格化后图层也能加描边,但这并非必要操作,更核心的问题是——
- 未初始化描边样式对象: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
相关产品推荐
相关产品推荐

