如何在Photoshop脚本中基于变量数据动态设置图层名称
解决Photoshop脚本中动态获取Actn和ASet值并设置图层名称的问题
问题根源
你之前使用ref.getName()时出错,是因为一个ActionReference对象中添加多个putName属性后,直接调用getName()只会返回最后一个添加的属性值,无法同时获取多个值。
正确解决方案
通过ActionReference的getReference(index)方法,分别提取每个子引用对应的名称:
- 用
getReference(0)获取第一个添加的Actn引用 - 用
getReference(1)获取第二个添加的ASet引用 - 再对每个子引用调用
getName()拿到对应的值
同时需要移除脚本中重复的executeAction调用,避免未定义变量报错。
修改后的关键代码片段
// 执行动作的部分(假设这部分由外部脚本动态修改值) var idPly = charIDToTypeID( "Ply " ); var desc = new ActionDescriptor(); var ref = new ActionReference(); ref.putName( charIDToTypeID( "Actn" ), "Orange" ); // 外部动态修改的值 ref.putName( charIDToTypeID( "ASet" ), "Velutto" ); // 外部动态修改的值 desc.putReference( charIDToTypeID( "null" ), ref ); executeAction( idPly, desc, DialogModes.NO ); // 正确获取Actn和ASet的值 var actnRef = ref.getReference(0); var actnName = actnRef.getName(); var aSetRef = ref.getReference(1); var aSetName = aSetRef.getName(); // 组合图层名称 var nowaNazwa = aSetName + "_" + actnName; // 修改图层名称的动作 var idsetd = charIDToTypeID("setd"); var desc776 = new ActionDescriptor(); var idnull = charIDToTypeID("null"); var ref255 = new ActionReference(); var idLyr = charIDToTypeID("Lyr "); var idOrdn = charIDToTypeID("Ordn"); var idTrgt = charIDToTypeID("Trgt"); ref255.putEnumerated(idLyr, idOrdn, idTrgt); desc776.putReference(idnull, ref255); var idT = charIDToTypeID("T "); var desc777 = new ActionDescriptor(); var idNm = charIDToTypeID("Nm "); desc777.putString(idNm, nowaNazwa); desc776.putObject(idT, idLyr, desc777); executeAction(idsetd, desc776, DialogModes.NO);
额外注意事项
- 将
#target photoshop;移至脚本最顶部,确保Photoshop正确识别脚本上下文 - 删除原代码中if语句外的重复
executeAction(idsetd, desc776, DialogModes.NO);,避免变量未定义时触发报错 - 如果外部脚本直接修改
ref.putName的参数值,上述代码可直接动态获取修改后的值,无需正则匹配固定字符串
内容的提问来源于stack exchange,提问作者Zikk
相关产品推荐
相关产品推荐

