Photoshop脚本需求:按名称导出指定LayerSet为PNG
Photoshop脚本:批量合并图层组可见层并导出PNG(事后恢复原状)
我有如图所示的图层组(LayerSet),希望通过复制的方式合并每个图层组内的可见图层,并导出为PNG文件,得到1.png、2.png、3.png、4.png和5.png。我已经能通过名称获取图层组,但不知道后续如何保存,现有代码片段如下,同时需要在完成导出后删除所有合并的图层,恢复原状:
var layersetNames = ["1", "2", "3", "4", "5"]; for (n = 0; n < layersetNames.length; n++) { var layersetName = layersetNames[n]; // get layerset by name var layerset = app.activeDocument.layerSets.getByName(layersetName); // copy & merge visible layers within this layerset // save the merged layer as .png } // after done saving, delete all the merged layers as if nothing had happened.
完整实现代码
var layersetNames = ["1", "2", "3", "4", "5"]; var mergedLayers = []; // 存储所有合并后的图层,用于后续删除 var savePath = app.activeDocument.path; // 使用当前文档所在路径作为导出路径 for (var n = 0; n < layersetNames.length; n++) { var layersetName = layersetNames[n]; var layerset = app.activeDocument.layerSets.getByName(layersetName); // 复制并合并当前图层组的可见层 app.activeDocument.activeLayer = layerset.layers[0]; // 选中组内第一个图层 layerset.mergeVisibleLayers(); // 合并组内可见层,生成新图层 var mergedLayer = app.activeDocument.activeLayer; mergedLayer.name = "merged_" + layersetName; // 给合并层命名,方便识别 mergedLayers.push(mergedLayer); // 加入待删除列表 // 将合并层导出为PNG var exportOptions = new ExportOptionsSaveForWeb(); exportOptions.format = SaveDocumentType.PNG; exportOptions.PNG8 = false; // 导出PNG-24格式 exportOptions.transparency = true; // 保留图层透明度(按需调整) exportOptions.quality = 100; var exportFile = new File(savePath + "/" + layersetName + ".png"); app.activeDocument.exportDocument(exportFile, ExportType.SAVEFORWEB, exportOptions); } // 删除所有合并的图层,恢复文档初始状态 for (var i = mergedLayers.length - 1; i >= 0; i--) { mergedLayers[i].remove(); }
关键步骤说明
- 合并可见层:通过
mergeVisibleLayers()方法直接合并目标图层组内的可见图层,生成的新图层自动成为当前活动层,我们将其存入数组以便后续统一清理。 - PNG导出配置:用
ExportOptionsSaveForWeb设置导出参数,包括格式、透明度保留、画质等,可根据实际需求调整。 - 恢复原状:从后往前遍历合并图层数组并删除,避免因图层顺序变动导致的索引错乱,确保文档回到操作前的状态。
内容的提问来源于stack exchange,提问作者MerelyLearning
相关产品推荐
相关产品推荐

