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

请求开发Illustrator递归生成子图层组合的JSX脚本

嘿,刚好能帮到你!针对你需要的Adobe Illustrator JSX脚本——自动提取主图层子图层并生成全组合的需求,我整理了一份可以直接运行的实现方案,一起来看看:

Adobe Illustrator JSX脚本:生成主图层子图层的全组合

需求回顾

需开发一款适用于Adobe Illustrator的JSX脚本,实现以下功能:提取所有主图层的子图层,递归生成所有子图层的组合。实际场景中可能存在多个包含子图层的主图层,脚本需支持递归遍历并生成全部子图层组合。

举个例子:如果有两个主图层,一个是包含不同颜色文本的图层组,另一个是包含不同颜色背景的图层组,脚本会自动生成所有背景+文本的组合图层组。

完整脚本实现

// Adobe Illustrator JSX脚本:生成主图层子图层的全组合
// 功能:自动识别所有包含子图层的主图层,递归生成所有子图层的笛卡尔积组合

function generateLayerCombinations() {
    // 检查当前是否有打开的AI文档
    if (app.documents.length === 0) {
        alert("请先打开一个Illustrator文档再运行脚本哦!");
        return;
    }

    var activeDoc = app.activeDocument;
    var mainLayerGroups = [];

    // 第一步:收集所有带子图层的顶层主图层
    for (var i = 0; i < activeDoc.layers.length; i++) {
        var topLayer = activeDoc.layers[i];
        // 只收集有子图层的顶层图层作为组合源
        if (topLayer.layers.length > 0) {
            var subLayersList = [];
            // 把当前主图层的所有直接子图层存起来
            for (var j = 0; j < topLayer.layers.length; j++) {
                subLayersList.push(topLayer.layers[j]);
            }
            mainLayerGroups.push(subLayersList);
        }
    }

    // 检查是否有足够的主图层来生成组合
    if (mainLayerGroups.length < 2) {
        alert("至少需要2个包含子图层的主图层才能生成组合哦!");
        return;
    }

    // 第二步:计算所有子图层的笛卡尔积(全组合)
    var allCombinations = calculateCartesianProduct(mainLayerGroups);

    // 第三步:为每个组合创建新图层组并复制内容
    for (var k = 0; k < allCombinations.length; k++) {
        var currentCombo = allCombinations[k];
        // 创建新的顶层图层组,用子图层名拼接成组名
        var comboGroup = activeDoc.layers.add();
        comboGroup.name = getComboGroupName(currentCombo);
        
        // 复制每个子图层的内容到新组里
        for (var m = 0; m < currentCombo.length; m++) {
            var sourceSubLayer = currentCombo[m];
            var copiedLayer = sourceSubLayer.duplicate(comboGroup, ElementPlacement.PLACEATEND);
            // 保留原图层的可见性设置
            copiedLayer.visible = sourceSubLayer.visible;
        }
    }

    alert(`搞定啦!已成功生成 ${allCombinations.length} 个图层组合!`);
}

// 辅助函数:计算多个数组的笛卡尔积,实现全组合
function calculateCartesianProduct(arrays) {
    return arrays.reduce(function(prev, curr) {
        return prev.flatMap(function(prevItem) {
            return curr.map(function(currItem) {
                return prevItem.concat([currItem]);
            });
        });
    }, [[]]);
}

// 辅助函数:生成组合图层组的名称(比如"Red background + White text")
function getComboGroupName(comboLayers) {
    return comboLayers.map(function(layer) {
        return layer.name;
    }).join(" + ");
}

// 启动脚本
generateLayerCombinations();

关键功能说明

  • 智能识别主图层:脚本会自动扫描文档里的所有顶层图层,只挑那些带有子图层的图层作为“主图层”,不会处理没有子层的单个图层。
  • 全组合生成:通过笛卡尔积算法,不管你有多少个主图层,都能生成所有可能的子图层组合——比如3个主图层分别有2、3、4个子层,会自动生成2×3×4=24种组合,完全覆盖所有可能性。
  • 无损复制:每个组合都会生成一个新的顶层图层组,组名清晰展示组合内容,而且只会复制原图层的内容,不会修改你原来的图层结构,安全放心。

小提示

  • 运行脚本前,确保你的AI文档里至少有2个带子图层的顶层主图层,不然脚本会友好提示你哦。
  • 如果子图层本身还有嵌套的子图层,脚本也会完整复制整个层级结构,满足递归遍历的需求。
  • 你可以根据自己的习惯修改脚本:比如调整组合图层的命名格式,或者修改复制后的图层属性(比如锁定、透明度、颜色标签等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:05:26