请求开发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
相关产品推荐
相关产品推荐

