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

如何用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:播放预先录制的动作

  1. 先在Photoshop的动作面板中录制一个动作,手动应用第三方滤镜并设置好你需要的参数
  2. 在脚本中调用这个动作:
// 播放「我的动作组」里的「应用复古滤镜」动作
app.playAction("应用复古滤镜", "我的动作组", DialogModes.NO);
// 第一个参数是动作名称,第二个是动作所在的组名称

第三方滤镜的注意事项:

  • 确保第三方滤镜已经正确安装并能在Photoshop手动调用
  • 如果是付费滤镜,要确保授权有效,避免脚本调用失败
  • 部分第三方滤镜可能需要Photoshop重启后才能被脚本识别

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:42:37