求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




