求助:将选中对象从CMYK黑色改为Bronze色板的JS脚本修正
修复Illustrator JS脚本:将选中对象颜色改为Bronze色板
原脚本的核心问题
- 填充判断逻辑错误:
obj.fillColor > 0完全不成立,fillColor是Color类型对象,不能和数值做比较,正确方式是检查对象是否具备fillColor属性 - 颜色赋值错误:直接用数值
5赋值给fillColor无效,必须通过文档色板集合获取对应名称的色板对象,再提取其颜色值赋值
正确实现代码
// 获取当前活动文档 var doc = app.activeDocument; // 检查是否有选中对象 if (doc.selection.length > 0) { // 遍历所有选中对象(支持批量处理) for (var i = 0; i < doc.selection.length; i++) { var obj = doc.selection[i]; // 确认对象支持填充颜色设置 if (obj.hasOwnProperty("fillColor")) { try { // 通过名称获取Bronze色板 var bronzeSwatch = doc.swatches.getByName("Bronze"); // 为对象设置填充颜色 obj.fillColor = bronzeSwatch.color; } catch (err) { // 色板不存在时给出提示 alert("错误:文档中未找到名为'Bronze'的色板\n" + err); } } } }
关键改进点
- 支持批量处理:遍历所有选中对象,而非仅第一个
- 类型安全检查:通过
hasOwnProperty确认对象可设置填充颜色,避免报错 - 标准色板获取:使用
doc.swatches.getByName()是Illustrator脚本中获取指定色板的正确方式 - 异常处理:捕获色板不存在的情况,给出明确提示,避免脚本崩溃
- 正确赋值:色板对象的
color属性才是可直接赋值给fillColor的颜色值
内容的提问来源于stack exchange,提问作者Bryan Bishop Pagenkopf
相关产品推荐
相关产品推荐

