如何使用JS脚本修改Illustrator中的LAB颜色值
你遇到的不生效问题不是API不支持该功能,是写法错误导致的:Illustrator脚本中swatch.color返回的是颜色对象的值拷贝,直接修改这个临时对象的属性不会同步更新到色板本身,必须修改后重新赋值给色板的color属性才会生效。
正确修改色板LAB值的代码
var doc = app.activeDocument; // 取出目标色板 var targetSwatch = doc.swatches.getByName("MySwatchName"); // 取出颜色对象修改通道值 var labColor = targetSwatch.color; labColor.l = 42; labColor.a = 40; labColor.b = 2; // 重新赋值回色板触发更新 targetSwatch.color = labColor;
如果你需要遍历文档内所有矢量对象,直接修改对象本身的填充/描边LAB色值(不绑定色板),可以参考以下逻辑:
var doc = app.activeDocument; // 遍历所有页面对象 for (var i = 0; i < doc.pageItems.length; i++) { var item = doc.pageItems[i]; // 修改填充色 if (item.filled && item.fillColor.typename === "LabColor") { var fillLab = item.fillColor; // 示例:L通道加5,a、b通道各减3,可按需调整规则 fillLab.l = Math.min(100, fillLab.l + 5); fillLab.a = Math.max(-128, Math.min(127, fillLab.a - 3)); fillLab.b = Math.max(-128, Math.min(127, fillLab.b - 3)); item.fillColor = fillLab; } // 修改描边色逻辑同理,替换fill相关属性为stroke即可 if (item.stroked && item.strokeColor.typename === "LabColor") { var strokeLab = item.strokeColor; strokeLab.l = Math.min(100, strokeLab.l + 5); strokeLab.a = Math.max(-128, Math.min(127, strokeLab.a - 3)); strokeLab.b = Math.max(-128, Math.min(127, strokeLab.b - 3)); item.strokeColor = strokeLab; } }
注意LAB通道取值范围要合规:L通道取值区间为0-100,a、b通道取值区间为-128到127,超出范围会触发脚本报错。
内容的提问来源于stack exchange,提问作者Ishay Frenkel
相关产品推荐
相关产品推荐

