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

求遍历Photoshop层组所有排列生成唯一PNG的JS/JSX脚本

适配Photoshop CS5的全排列图层组合导出JSX脚本

功能说明

  • 自动遍历PSD所有顶层层组,按「每个层组仅选1个图层」的规则生成所有合法组合,完全无重复
  • 无需提前手动隐藏图层,脚本运行时自动处理显隐逻辑
  • 导出文件名携带所选图层名称,方便溯源,例如组合_短发_白T恤_牛仔裤.png
  • 原生兼容Photoshop CS5版本

完整脚本代码

// 兼容Photoshop CS5 全排列图层组合导出脚本
app.activeDocument.suspendHistory("批量导出组合", "main()");

function main() {
    var doc = app.activeDocument;
    var topGroups = doc.layerSets;
    if (topGroups.length < 1) {
        alert("当前文档没有检测到顶层层组,请检查PSD结构");
        return;
    }

    // 1. 预处理:收集每个层组的可选图层,同时隐藏所有图层
    var groupLayers = [];
    for (var g = 0; g < topGroups.length; g++) {
        var group = topGroups[g];
        group.visible = true;
        var validLayers = [];
        for (var l = 0; l < group.layers.length; l++) {
            var layer = group.layers[l];
            layer.visible = false;
            // 跳过名称以下划线开头的图层,不需要可直接移除该判断
            if (layer.name.indexOf("_") !== 0) {
                validLayers.push(layer);
            }
        }
        if (validLayers.length === 0) {
            alert("层组" + group.name + "没有有效可选图层,请检查");
            return;
        }
        groupLayers.push(validLayers);
    }

    // 2. 生成所有组合的笛卡尔积
    var allCombinations = cartesianProduct(groupLayers);
    var confirmRun = confirm("检测到共" + allCombinations.length + "个合法组合,是否开始导出?");
    if (!confirmRun) return;

    // 3. 创建导出文件夹
    var outputFolder = new Folder(doc.path + "/PNG");
    if (!outputFolder.exists) outputFolder.create();

    // 4. 遍历所有组合导出
    var pngOptions = new PNGSaveOptions();
    pngOptions.interlaced = false;
    for (var c = 0; c < allCombinations.length; c++) {
        var combination = allCombinations[c];
        var fileNameParts = [];
        // 显示当前组合的图层
        for (var i = 0; i < combination.length; i++) {
            var layer = combination[i];
            layer.visible = true;
            fileNameParts.push(layer.name);
        }
        // 保存文件
        var savePath = new File(outputFolder + "/组合_" + fileNameParts.join("_") + ".png");
        doc.saveAs(savePath, pngOptions, true, Extension.LOWERCASE);
        // 隐藏当前组合的图层,为下一次组合做准备
        for (var i = 0; i < combination.length; i++) {
            combination[i].visible = false;
        }
    }

    alert("导出完成,共导出" + allCombinations.length + "个PNG文件");
    // 恢复文档初始状态
    var idRvrt = charIDToTypeID("Rvrt");
    executeAction(idRvrt, undefined, DialogModes.NO);
}

// 笛卡尔积生成函数,输入多组数组,返回所有排列组合
function cartesianProduct(arrays) {
    return arrays.reduce(function(a, b) {
        var result = [];
        a.forEach(function(x) {
            b.forEach(function(y) {
                result.push(x.concat([y]));
            });
        });
        return result;
    }, [[]]);
}

使用方法

  • 打开目标PSD文件,确保参与组合的所有部位都存放在顶层层组中,层组下直接放对应可选样式的图层(若需要支持嵌套层组可自行修改代码遍历逻辑)
  • 将上述代码复制保存为后缀为.jsx的文件
  • 在Photoshop中依次点击「文件」→「脚本」→「浏览」,选择保存的JSX文件运行
  • 弹出组合数量确认提示后点击确认,等待导出完成即可,导出的文件存放在PSD同目录的PNG文件夹下

注意事项

  • 总组合数为所有层组可选图层数量的乘积,组合数过大时运行时间较长,建议先小批量测试
  • 若不需要过滤下划线开头的图层,删除对应判断条件即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:06:05