ReplaceItems.jsx 批量替换脚本上手指南:Illustrator 里几百个对象换新,从一下午到三分钟
2026/9/6 13:55:01 网站建设 项目流程

ReplaceItems.jsx 批量替换脚本上手指南:Illustrator 里几百个对象换新,从一下午到三分钟

【免费下载链接】illustrator-scriptsAdobe Illustrator scripts项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts

周三晚上九点四十七分,交付前夜,我还在 Illustrator 里跟 36 个旧版图标较劲:点选、删除、粘贴、拖回原位、对齐,周而复始,房间里只有键盘声。朋友从聊天窗口甩来一个文件,附带一句"用这个,别手动了"。那个文件叫replaceItems.jsx,来自开源脚本合集illustrator-scripts(作者 Alexander Ladygin,MIT 协议,完全免费)。它的核心功能一句话就能说清:批量替换 Illustrator 对象——把一个或多个对象当作模板,一次性换掉你选中的几百个对象,尺寸、位置、颜色一并处理,甚至还能随机旋转。

这篇文章不是官方文档的翻译,而是我这几个月把它从"好奇试用"用到"离不开"的真实记录:它怎么装、怎么配、每一步为什么这么做、哪些地方容易翻车,以及这笔时间账到底怎么算。

一、一个 .jsx 文件,把我从"复制粘贴地狱"里捞了出来

先花十秒说清楚这个脚本解决的是什么。Illustrator 里"替换对象"这件事,手动做就是四步循环:选旧的、删掉、粘新的、手动对齐。一次两次没问题,几十次之后,手指会替你记住这种酸痛。

replaceItems.jsx 的界面里有一组单选按钮,它把"拿什么来替换"这件事分成了四种情况,我觉得这比脚本本身更值得佩服——它把设计师脑子里的需求真正枚举干净了:

模式干的事什么时候用
Object in buffer(剪贴板对象)把剪贴板里那个对象当作模板,复制 N 份去顶替所有目标从别的文档或素材库复制模板,跨文档替换
Top object(顶层对象)用当前选中里最上面那个对象做模板模板就在画布上,随手改一版就全局换新
All in group (successively)(组内顺序替换)从最上层对象所在的组里,按子对象顺序逐个取模板想把 A 组里的一排小部件,按顺序换成 B 组里的一排
All in group (random)(组内随机替换)同上,但从组里随机抽模板做有机图案、自然变化的效果

四种模式对应四种直觉:"盖一个章""拿一个现成的换""排队领号""抽签"。脚本本身不炫技,但它把你可能想到的每一种替换来源都兜住了。

二、尺寸、位置、颜色:三个最容易出错的环节,它都替你处理了

手动替换最崩溃的不是替换本身,而是替换完发现尺寸不对、位置偏了、颜色没跟上。这块才是 replaceItems.jsx 真正的技术含量。

尺寸上它默认"等比放进框里"。看这段核心逻辑:

var __size = (item.height >= item.width ? item.width : item.height) * __ratio, precent = __size * 100 / node[__fn] / 100; if (fitInSizeCheckbox.value) { node[__fn] = __size; node[__fnReverse] *= precent; }

翻译成人话:它取目标对象较短的那条边作为基准,把替换对象等比缩放到这条边刚好等于目标,长边按比例跟着走——就像往相框里放照片,照片自动按比例适应框,不会变形。如果你勾上 "Copy Width & Height"(复制宽高),它就直接把目标的宽高抄过去,像素级对齐,适合对尺寸有严格要求的场景。

位置上它做的是"中心对齐"。替换完,它把新对象挪到原来那个对象的中心点上:

node.left = item.left - (node.width - item.width) / 2; node.top = item.top + (node.height - item.height) / 2;

颜色上它玩的是递归。因为 Illustrator 里对象类型杂,群组里套复合路径、复合路径里再套路径,脚本用递归把填充色一层层剥出来再按同构结构填回去:

function setFillColor (items, color) { if (color) { var i = items.length; if (i) while (i--) { if (items[i].typename === 'GroupItem') { setFillColor(items[i].pageItems, color); // 群组:钻进去递归 } else if (items[i].typename === 'CompoundPathItem') { if (items[i].pathItems.length) items[i].pathItems[0].fillColor = color; } else if (items[i].typename === 'PathItem') { items[i].fillColor = color; } } } }

还有一个只有踩过坑的人才懂的细节:符号对象的注册点。符号在缩放、旋转时是围绕注册点转的,注册点在中心的话,替换完位置就会偏。脚本的getSymbolPositionByRegistrationPoint会临时把符号注册点改成左上角去量一次真实位置、替换完再改回来,保证符号也贴得准。这个处理是我见过很多同类脚本没做到位的。

三、第一次完整跑通:把 36 个旧图标换成新图标

说一千道一万,不如走一遍。下面这个案例就是我开头那个周三晚上做的事,你也照做一遍,十分钟内能跑通。

第 0 步:安装(只用做一次)仓库地址https://gitcode.com/gh_mirrors/il/illustrator-scriptsgit clone下来后,把replaceItems.jsx放进 Illustrator 的脚本目录,然后重启 Illustrator:

  • macOS:/Applications/Adobe Illustrator [版本]/Presets.localized/zh_CN/Scripts
  • Windows 64 位:C:\Program Files\Adobe\Adobe Illustrator [版本] (64 Bit)\Presets\zh_CN\Scripts

装好之后,菜单栏文件 → 脚本 → replaceItems就能打开它。

第 1 步:准备模板选中新版图标,Ctrl+C 复制到剪贴板。为什么用剪贴板模式?因为模板可能来自素材库文档,跨文档复制后,脚本执行时会在当前文档里app.paste()粘贴一份再复制 N 份,全程不用切窗口。

第 2 步:选中所有旧图标框选或点选 36 个旧图标。此时选中的对象就是"待替换目标"。

第 3 步:配置选项选 "Object in buffer",勾上 "Fit to element size"(让新图标按旧图标比例缩放)和 "Copy colors from element"(沿用旧图标的填充色)。注意 "Copy Width & Height" 会和前面两项互斥,勾一个另一个自动变灰,这是脚本故意做的防呆。

第 4 步:先预览,再确认第一次跑建议勾上 "Save original element"(保留原对象),这样替换完新旧叠在一起,肉眼检查位置和比例是否满意。确认没问题后,取消勾选再跑一次,旧对象就会被清掉,一次性交付。

这个"先留原稿预览、再全量替换"的习惯,能帮你把返工成本降到接近零。

四、给英文界面对个表:每个选项什么时候用

脚本界面是英文的,第一次用容易懵。我把所有选项翻译并注上用途,你可以存着对照:

界面原文含义我的建议
Object in buffer用剪贴板对象替换模板在外部文档时首选
Top object用最上层选中对象替换模板就在画布上时用
All in group (successively / random)用组内对象按顺序 / 随机替换批量换组内小部件时用
Replace items in a group?替换范围变为组内子对象想整体换掉某个组的内容时勾
Fit to element size等比缩放到目标大小图标、图形替换推荐
Copy Width & Height精确复制目标宽高对尺寸要求严苛时用
Save original element保留原对象不删除预览、对比方案时勾
Copy colors from element继承原对象填充色品牌色统一时勾
Random element rotation随机旋转 0-360 度做图案、自然散布时勾
Align symbols by registration point按注册点对齐符号替换符号对象时务必勾
右侧数字输入框(默认 100)缩放比例百分比想统一缩小就改成 80、50 等

五、用了一个月才总结出的避坑清单

这些坑我都踩过,写下来帮你绕开:

  1. 剪贴板模式的"模板"最后会被删掉。脚本跑完会执行nodes.remove()把粘贴进来的缓冲对象清掉。如果你还想拿同一个模板继续替换别处,记得再复制一次。
  2. 非剪贴板模式下,选中列表里第一个对象不会被替换。看循环开头那句if (!bufferRadio.value && !i) break;——它在 i 归零时提前跳出。在"顶层对象"模式下,那个顶层对象本身就是模板,留着是合理的;但如果你用的是组内模式却少换了一个,别怀疑自己手滑,这是脚本的行为,把原型单独放一层就好。
  3. "复制宽高"和"适应尺寸"只能二选一,勾了前者比例输入框会变灰,别误以为脚本坏了。
  4. 颜色复制只取"找到的第一个填充色"。如果原对象是群组且内部混色,结果可能不是你想要的;要做纯色替换,建议先把目标拆组或只选单一填充对象。
  5. 符号对象不勾注册点对齐,必偏。普通对象的居中算法对符号不成立,替换符号类素材时记得勾 "Align symbols by registration point"。
  6. 设置会自动持久化。脚本会把你的选择存成 JSON(在我的文档下的LA_AI_Scripts/ReplaceItems__setting.json),下次打开自动恢复。换电脑或换账号时配置不跟着走,别奇怪。
  7. 对象量大就分批。几千个对象一次全选,进度条再好看 Illustrator 也会卡。建议按图层或画板分批,每批控制在千级以内,稳。

六、一小时还是三分钟:这笔账可以算

用数字说话(数据来自我自己那个 36 图标的真实案例,以及基于同样操作节奏的推算,供参考):

场景手动耗时脚本耗时说明
36 个图标换新(实测)约 26 分钟约 1 分 40 秒(含配置)手动按每个约 40 秒估算:选中、删除、粘贴、对齐、核对
120 个按钮更新(实测)约 70 分钟约 3 分钟脚本耗时主要在前几次配置
500 个对象批量替换(推算)约 5-6 小时10-15 分钟按同样节奏线性外推,含分批执行

提升 15-20 倍是个保守数字,因为脚本还免掉了"替换完重新核对一致性"这步隐形成本——手动操作得一个个确认没漏没偏,脚本则是同一套逻辑跑到底。前提是先在小批量上把选项配对,配错了 500 个对象一起错,返工成本照样惊人。

七、它只是整个工具箱里的一把螺丝刀

最后说点大局观:illustrator-scripts 不是一个孤立脚本,而是一整个"AI 效率工具箱",replaceItems.jsx 只是其中一把螺丝刀。同一个仓库里还躺着:

  • harmonizer.jsx——把一堆乱糟糟的对象一键排序整理;
  • randomus.jsx——随机填充色、随机缩放、随机旋转、随机透明度,实时预览;
  • cropulka.jsx——把超出画板的内容裁剪掉,做微利图库和印刷特别好用;
  • batchTextEdit.jsx——批量编辑文本内容;
  • fillinger.jsx——用其他对象去填充一个封闭图形;
  • artboardsResizeWithObjects.jsx——画板连同上面所有对象一起缩放。

这些脚本的安装方式完全一样,丢进 Scripts 文件夹重启即可,共享的工具函数则收在libraries/AI_PS_Library.js里。整套代码 MIT 协议,可以自由阅读、修改、分发——想加功能、提 bug,直接在仓库提 issue 就行;想改得趁手,直接改源码,改动一个 .jsx 文件比想象中简单得多。

八、结尾

那个周三晚上,我在 23:12 给客户发出了预览稿,比原计划提前了整整大半天。后来我把这份省下来的时间用在了真正该花的地方——把 36 个图标重新画了三版,挑最好的那版交付。

工具的意义不是让你"干得更快",而是让那些本不该由人反复做的事,从此不用人来做。替换对象是这样,设计里的许多重复劳动大概也是这样。

【免费下载链接】illustrator-scriptsAdobe Illustrator scripts项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询