求编写Photoshop脚本:按规则导出图层为PNG并适配16倍数尺寸
Photoshop脚本:批量处理图层并导出16倍数尺寸的PNG
以下是符合需求的脚本,它会遍历当前Photoshop文档中的所有可见图层,自动检查图层尺寸是否为16的像素倍数;若不符合则均匀在图层四周补像素(保持图层内容居中),符合则直接导出PNG文件。
// 设置单位为像素,避免单位混乱 preferences.rulerUnits = Units.PIXELS; var doc = activeDocument; // 导出路径,可自行修改(注意路径分隔符用/) var exportPath = "D:/Spine_Assets/Exported_PNGs/"; // 创建导出PNG的配置 var pngOptions = new ExportOptionsPNG24(); pngOptions.transparency = true; // 保留透明通道 pngOptions.interlaced = false; // 遍历所有可见图层 for (var i = 0; i < doc.layers.length; i++) { var layer = doc.layers[i]; // 跳过隐藏图层 if (!layer.visible) continue; // 获取当前图层的实际尺寸(包含内容的边界框) var bounds = layer.bounds; var layerWidth = bounds[2] - bounds[0]; var layerHeight = bounds[3] - bounds[1]; // 计算需要调整到的16倍数尺寸 var targetWidth = Math.ceil(layerWidth / 16) * 16; var targetHeight = Math.ceil(layerHeight / 16) * 16; // 记录原始画布尺寸,用于处理后恢复 var originalWidth = doc.width; var originalHeight = doc.height; // 只有当目标尺寸和当前图层尺寸不一致时,才调整画布 if (targetWidth !== layerWidth || targetHeight !== layerHeight) { // 计算需要扩展的像素量,均匀分配到四周 var offsetX = (targetWidth - layerWidth) / 2; var offsetY = (targetHeight - layerHeight) / 2; // 调整画布尺寸,锚点设为居中,实现均匀补像素 doc.resizeCanvas( targetWidth, targetHeight, AnchorPosition.MIDDLECENTER, offsetX - bounds[0], offsetY - bounds[1] ); } // 导出当前图层为PNG var exportFile = new File(exportPath + layer.name + ".png"); doc.exportDocument(exportFile, ExportType.PNG24, pngOptions); // 恢复原始画布尺寸,避免影响其他图层 if (targetWidth !== layerWidth || targetHeight !== layerHeight) { doc.resizeCanvas(originalWidth, originalHeight, AnchorPosition.MIDDLECENTER); } } alert("所有可见图层导出完成!");
关键功能说明
- 图层遍历:仅处理可见图层,避免导出不需要的内容
- 均匀补像素:通过计算偏移量,将图层内容保持在画布中心,补的像素均匀分布在上下左右,不会像原始代码那样只往右下扩展
- 尺寸判断:只有当图层尺寸不是16的倍数时才执行调整,否则直接导出
- 画布恢复:处理完单个图层后立即恢复文档原始画布尺寸,不影响后续图层的处理
- 透明通道保留:导出的PNG会保留图层的透明区域,适配Spine的骨骼动画需求
使用注意事项
- 运行脚本前,请确保当前Photoshop文档已保存
- 修改代码中的
exportPath为你实际需要导出的文件夹路径(Windows系统用/作为分隔符,避免转义问题) - 脚本会以图层的名称作为导出PNG的文件名,建议提前整理好图层名称
内容的提问来源于stack exchange,提问作者Plunksville
相关产品推荐
相关产品推荐

