You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求Photoshop脚本:删除选中图层的图层蒙版(含应用蒙版再删除方案)

Photoshop脚本:删除选中图层的蒙版(含应用后删除方案)

你提到的需求我很熟悉,下面提供两种完全匹配需求的JavaScript解决方案,优先使用Photoshop原生API实现,同时也附上ScriptListener风格的代码选项:


方案1:直接删除蒙版(不应用效果)

这个方案会直接移除选中图层的蒙版,不会将蒙版的遮罩效果合并到图层,适合不需要保留蒙版效果的场景。代码会自动遍历所有选中的图层,确保每个带蒙版的图层都被处理:

// 获取当前文档中选中的所有图层
var selectedLayers = app.activeDocument.selection;

// 遍历每个选中图层
for (var i = 0; i < selectedLayers.length; i++) {
    var currentLayer = selectedLayers[i];
    // 检查图层是否存在图层蒙版
    if (currentLayer.hasLayerMask) {
        // 移除蒙版,DISCARD参数表示丢弃蒙版效果
        currentLayer.removeLayerMask(RemoveMaskType.DISCARD);
    }
}

// 操作完成提示
alert("选中图层的蒙版已全部移除(未应用)!");

关键说明:

  • RemoveMaskType.DISCARD:指定直接删除蒙版,不应用其遮罩效果;如果误写为APPLY,则会先应用再删除(就是方案2的逻辑)。
  • 代码会自动跳过没有蒙版的选中图层,避免报错。

方案2:先应用蒙版再删除(合并效果到图层)

如果需要保留蒙版的遮罩效果(将其合并到图层像素中),再移除蒙版,用这个方案:

var selectedLayers = app.activeDocument.selection;

for (var i = 0; i < selectedLayers.length; i++) {
    var currentLayer = selectedLayers[i];
    if (currentLayer.hasLayerMask) {
        // 应用蒙版:将蒙版效果合并到图层像素
        currentLayer.applyLayerMask();
        // 应用完成后,蒙版会自动被Photoshop移除,无需额外删除操作
    }
}

alert("选中图层的蒙版已应用并移除!");

关键说明:

  • applyLayerMask()方法执行后,蒙版会被自动删除,图层像素会变成蒙版遮罩后的效果。
  • 该方法仅对带有图层蒙版的图层有效,所以提前判断hasLayerMask很有必要。

备选:ScriptListener风格代码(charIDToTypeID格式)

如果你需要使用ScriptListener生成的底层Action代码,下面是针对单个选中图层直接删除蒙版的版本:

var actionDesc = new ActionDescriptor();
var actionRef = new ActionReference();

actionRef.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
actionDesc.putReference(charIDToTypeID("null"), actionRef);
actionDesc.putEnumerated(charIDToTypeID("Msk "), charIDToTypeID("MskT"), charIDToTypeID("Dscd"));

executeAction(charIDToTypeID("Dlt "), actionDesc, DialogModes.NO);

如果要处理多个选中图层,需要循环遍历选中图层,逐个将目标图层设置为当前活动图层后执行上述代码。


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

火山引擎 最新活动