如何用JavaScript在Photoshop活动图层应用FilterGallery>PosterEdges及第三方滤镜?
在Photoshop中用JavaScript脚本应用指定滤镜
没问题,我来帮你搞定用JS脚本在Photoshop活动图层上应用滤镜的需求,分内置Filter Gallery的Poster Edges和第三方滤镜两种情况给你讲清楚:
一、应用Poster Edges滤镜(指定参数:edgeThickness=7, edgeIntensity=1, posterization=6)
Photoshop的Filter Gallery类滤镜没法直接用简单API调用,得借助ActionManager来构建参数执行。下面是完整可运行的脚本,已经帮你设置好参数了:
// 先做基础校验:确保有打开的文档 if (app.documents.length === 0) { alert("请先打开一个Photoshop文档哦!"); exit(); } var activeDoc = app.activeDocument; var targetLayer = activeDoc.activeLayer; // 校验活动图层是否为像素图层(滤镜只能应用在像素图层上) if (targetLayer.kind !== LayerKind.NORMAL) { alert("请选择一个像素图层作为活动图层!"); exit(); } // 构建动作描述符,调用Poster Edges滤镜 var actionDesc = new ActionDescriptor(); var actionRef = new ActionReference(); actionRef.putClass(charIDToTypeID("Fltr")); actionDesc.putReference(charIDToTypeID("null"), actionRef); actionDesc.putString(charIDToTypeID("Nm "), "Poster Edges"); // 指定滤镜名称 // 设置你要的三个参数 var filterParams = new ActionDescriptor(); filterParams.putInteger(charIDToTypeID("EdgT"), 7); // Edge Thickness filterParams.putInteger(charIDToTypeID("EdgI"), 1); // Edge Intensity filterParams.putInteger(charIDToTypeID("Pstr"), 6); // Posterization actionDesc.putObject(charIDToTypeID("Usng"), charIDToTypeID("Fltr"), filterParams); // 执行滤镜,不弹出设置窗口 executeAction(charIDToTypeID("Mk "), actionDesc, DialogModes.NO);
关键说明:
- 开头的校验是为了避免脚本在无文档或非像素图层上运行报错
- 这里的
charID(比如"EdgT")是Photoshop内部的参数标识,你可以通过录制动作然后查看动作的代码来获取这类标识 DialogModes.NO表示直接用指定参数执行,不会弹出滤镜的设置对话框
二、应用第三方滤镜
第三方滤镜的处理分两种情况,取决于它是否支持脚本化参数:
情况1:第三方滤镜支持脚本化参数
如果这个第三方滤镜能通过Photoshop的动作录制捕捉到参数(录制动作后能看到参数代码),那可以用类似上面的ActionManager方法调用,只需要替换滤镜名称和对应的参数即可。比如假设你有个叫CustomArtFilter的第三方滤镜,要设置strength=10:
// 先做基础校验(同上面的代码,可复用) if (app.documents.length === 0 || app.activeDocument.activeLayer.kind !== LayerKind.NORMAL) { alert("请打开文档并选择像素图层!"); exit(); } var actionDesc = new ActionDescriptor(); var actionRef = new ActionReference(); actionRef.putClass(charIDToTypeID("Fltr")); actionDesc.putReference(charIDToTypeID("null"), actionRef); actionDesc.putString(charIDToTypeID("Nm "), "CustomArtFilter"); // 替换为你的第三方滤镜名称 // 替换为该滤镜对应的参数标识和值 var filterParams = new ActionDescriptor(); filterParams.putInteger(charIDToTypeID("Strn"), 10); actionDesc.putObject(charIDToTypeID("Usng"), charIDToTypeID("Fltr"), filterParams); executeAction(charIDToTypeID("Mk "), actionDesc, DialogModes.NO);
情况2:第三方滤镜不支持脚本化参数
如果录制动作时无法捕捉到滤镜的参数(比如参数面板是第三方自己开发的,不被Photoshop脚本识别),那可以用以下两种方法:
方法A:直接调用菜单命令
找到第三方滤镜在Photoshop菜单中的路径,直接调用:
// 基础校验 if (app.activeDocument.activeLayer.kind !== LayerKind.NORMAL) { alert("请选择像素图层!"); exit(); } // 示例:假设滤镜在「滤镜」→「第三方滤镜组」→「复古质感」下 app.menuActions.itemByID(stringIDToTypeID("menu_Filter")) .submenu.itemByName("第三方滤镜组") .submenu.itemByName("复古质感") .invoke();
注意:菜单名称要和Photoshop中显示的完全一致,中英文版本要对应(英文PS用英文名称,中文用中文)
方法B:播放预先录制的动作
- 先在Photoshop的动作面板中录制一个动作,手动应用第三方滤镜并设置好你需要的参数
- 在脚本中调用这个动作:
// 播放「我的动作组」里的「应用复古滤镜」动作 app.playAction("应用复古滤镜", "我的动作组", DialogModes.NO); // 第一个参数是动作名称,第二个是动作所在的组名称
第三方滤镜的注意事项:
- 确保第三方滤镜已经正确安装并能在Photoshop手动调用
- 如果是付费滤镜,要确保授权有效,避免脚本调用失败
- 部分第三方滤镜可能需要Photoshop重启后才能被脚本识别
内容的提问来源于stack exchange,提问作者Ruchit
相关产品推荐
相关产品推荐

