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

基于选中图形颜色数量循环执行操作的Illustrator脚本求助

Illustrator脚本开发:获取选中图形颜色数量并存储颜色名称

需求说明

需要开发Illustrator脚本,实现根据选中图形的颜色数量循环执行指定操作,同时将颜色名称存储到数组中。目前已写出基础框架,但无法获取选中图形的颜色数量并赋值给selcolors变量。

基础脚本框架

var doc = app.activeDocument;
var sel = doc.selection[0];
var selcolors = 0;

//====================
//Here I need to get how many colors the selected art have and set it to selcolors
//====================

for(i = 0; i < selcolors; i++)
{
   //Set of actions
}

解决方案代码

以下是完善后的脚本,可实现获取选中图形的唯一颜色数量、存储颜色名称,并基于颜色数量循环执行操作:

var doc = app.activeDocument;
var sel = doc.selection[0];
var selcolors = 0;
var colorNames = []; // 用于存储颜色名称的数组

// 获取选中图形的所有唯一颜色(含组内元素递归处理)
function getUniqueColors(art) {
    var colors = [];
    var colorIds = new Set(); // 用集合实现颜色去重

    // 检查填充颜色
    if (art.fillColor != null && art.fillColor.typename !== "NoColor") {
        addColor(art.fillColor);
    }

    // 检查描边颜色
    if (art.stroked && art.strokeColor != null && art.strokeColor.typename !== "NoColor") {
        addColor(art.strokeColor);
    }

    // 递归处理组内子元素
    if (art.typename === "GroupItem") {
        for (var i = 0; i < art.pageItems.length; i++) {
            var subColors = getUniqueColors(art.pageItems[i]);
            subColors.forEach(color => addColor(color));
        }
    }

    // 添加颜色并去重的内部函数
    function addColor(color) {
        var colorKey, colorName;

        // 根据颜色类型生成唯一标识和名称
        switch (color.typename) {
            case "SpotColor":
                colorKey = color.spot.name;
                colorName = color.spot.name;
                break;
            case "CMYKColor":
                colorKey = [color.cyan, color.magenta, color.yellow, color.black].join(",");
                colorName = `CMYK(${color.cyan},${color.magenta},${color.yellow},${color.black})`;
                break;
            case "RGBColor":
                colorKey = [color.red, color.green, color.blue].join(",");
                colorName = `RGB(${color.red},${color.green},${color.blue})`;
                break;
            case "GrayColor":
                colorKey = color.gray.toString();
                colorName = `Gray(${color.gray})`;
                break;
            default:
                return; // 忽略未知颜色类型
        }

        if (!colorIds.has(colorKey)) {
            colorIds.add(colorKey);
            colors.push(color);
            colorNames.push(colorName);
        }
    }

    return colors;
}

// 获取选中图形的颜色数组并赋值数量
var selectedColors = getUniqueColors(sel);
selcolors = selectedColors.length;

// 循环执行指定操作
for (var i = 0; i < selcolors; i++) {
    // 示例:打印当前处理的颜色名称
    $.writeln(`处理第${i+1}种颜色:${colorNames[i]}`);
    // 在这里替换为你的自定义操作逻辑
    // 比如对当前颜色执行样式修改、导出等操作
}

代码关键点说明

  • 颜色去重:通过Set集合存储颜色的唯一标识,避免重复统计同一颜色
  • 多类型颜色支持:适配专色、CMYK、RGB、灰度等常见Illustrator颜色类型
  • 组元素处理:递归遍历组内的所有子元素,确保选中组时能获取全部颜色
  • 颜色名称存储:colorNames数组会存储每种颜色的可读名称,专色直接用其名称,其他颜色用参数组合字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:35:00