论坛帮助 |
社区圈子 |
日历事件 |
2024-12-07, 16:15 | #3 | ||
|
|||
正式会员
等级: 四袋长老
|
脚本逻辑解释 获取文档并检查: 通过app.activeDocument获取当前在 Illustrator 中处于活动状态的文档。若不存在活动文档,弹出提示框告知用户需先打开文档,随后函数直接返回,不再执行后续操作。 定义递归处理函数: processObjects函数用来遍历对象。针对传入的对象数组中的每一个对象,分别处理其填充颜色和描边颜色。若填充颜色或描边颜色为CMYKCOLOR色彩模式,则获取其对应的CMYKColor对象,接着对青(cyan)、品红(magenta)、黄(yellow)、黑(black)各颜色通道的值乘以0.9(也就是减少百分之十),同时使用Math.max(0,...)确保调整后的值不会小于0(避免出现不合理的颜色值),最后把调整后的CMYKColor对象重新赋值给对应的填充或描边颜色属性。若对象包含子对象(例如组内嵌套的其他对象),会递归调用processObjects函数来处理这些子对象,以此保证所有层级的对象颜色都能得到处理。 执行处理操作: 在reduceColorByTenPercent主函数里,调用processObjects函数并传入文档的顶级页面项(doc.pageItems),启动对整个文档中对象颜色的调整流程。从文档最顶层的对象开始,逐步深入到所有嵌套的对象,实现各对象颜色按要求减少百分之十的操作。 最后,通过调用reduceColorByTenPercent主函数来触发整个颜色调整过程,将打开文件中符合条件的对象颜色按设定的规则进行调整。不过要注意,实际应用中可根据具体情况,如是否要处理其他色彩模式、特殊图形对象等进一步优化和完善该脚本。 // 主函数,用于执行颜色减少百分之十的操作 function reduceColorByTenPercent() { // 获取当前活动文档,如果没有打开文档则提示用户并返回 var doc = app.activeDocument; if (!doc) { alert("请先打开一个Illustrator文档后再运行此脚本。"); return; } // 递归函数,用于遍历文档中的所有对象(包括组内对象等) function processObjects(objects) { for (var i = 0; i < objects.length; i++) { var obj = objects[i]; // 处理填充颜色 if (obj.fills && obj.fills.length > 0) { var fill = obj.fills[0]; if (fill.colorModel == ColorModel.CMYKCOLOR) { var cmykColor = fill.color; cmykColor.cyan = Math.max(0, cmykColor.cyan * 0.9); cmykColor.magenta = Math.max(0, cmykColor.magenta * 0.9); cmykColor.yellow = Math.max(0, cmykColor.yellow * 0.9); cmykColor.black = Math.max(0, cmykColor.black * 0.9); fill.color = cmykColor; } } // 处理描边颜色 if (obj.strokes && obj.strokes.length > 0) { var stroke = obj.strokes[0]; if (stroke.colorModel == ColorModel.CMYKCOLOR) { var cmykColor = stroke.color; cmykColor.cyan = Math.max(0, cmykColor.cyan * 0.9); cmykColor.magenta = Math.max(0, cmykColor.magenta * 0.9); cmykColor.yellow = Math.max(0, cmykColor.yellow * 0.9); cmykColor.black = Math.max(0, cmykColor.black * 0.9); stroke.color = cmykColor; } } // 如果对象包含子对象(比如组对象),递归调用处理子对象 if (obj.pageItems) { processObjects(obj.pageItems); } } } // 开始处理文档中的顶级对象(页面上直接可见的对象) processObjects(doc.pageItems); } // 调用主函数来执行颜色调整操作 reduceColorByTenPercent(); |
||
回复时引用此帖 |