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