n8n 图片自动化处理:一条工作流搞定批量裁剪压缩
【免费下载链接】n8nFair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.项目地址: https://gitcode.com/GitHub_Trending/n8/n8n
运营每周要处理 300 张产品图:改尺寸、加水印、压大小,手工在 PS 里一张张点,从早干到晚。开发给写个脚本吧,又得排期。这种重复劳动其实最适合扔给 n8n 图片自动化处理——把"读图、改图、存图"串成一条可视化流水线,以后新图进来,流程自己跑完。
上面这张截图就是 n8n 的工作流编辑器:左侧拖节点连线,右侧配置参数,无需写脚本。整条流水线由三个组件协作完成:
Read/Write Files from Disk节点:负责把磁盘上的图片读成二进制数据,流程结束时再写回去。Edit Image节点:核心加工环节,底层用 GraphicsMagick 封装,提供crop、resize、text、border、blur、composite、transparent共 11 种操作,其中multiStep能在一个节点里按顺序串多步。- Webhook:接收业务系统推送,让流程能被自动触发。
最小链路:先跑通再说
先搭一条最简链路验证环境。Read/Write Files from Disk负责取图,这里只需两个关键参数:
node: Read/Write Files from Disk operation: read fileSelector: /data/images/*.jpg再拖一个Edit Image节点接在后面。它在这里的作用是对上游的二进制图片做第一次加工。关键参数:
node: Edit Image operation: resize dataPropertyName: data width: 800 height: 600 resizeOption: maximumAreadataPropertyName必须和上游二进制属性名一致(读盘节点默认就是data)。这里有个坑:resize默认模式maximumArea是"等比缩放到不超出指定区域",想要 800x600 精确像素,把resizeOption改成ignoreAspectRatio。
用 multiStep 把裁剪压缩塞进一个节点
真实需求很少是单一操作。operation切到multiStep,就能按顺序追加操作,比串联多个节点省事,也省掉中间状态:
{ "operation": "multiStep", "operations": [ { "operation": "crop", "width": 800, "height": 800, "positionX": 0, "positionY": 0 }, { "operation": "resize", "width": 400, "height": 400, "resizeOption": "maximumArea" }, { "operation": "text", "text": "SAMPLE", "fontSize": 24, "positionX": 20, "positionY": 380 } ] }每步的参数结构和单操作模式完全一致:crop需要宽高加原点,text需要字号、坐标和换行长度lineLength,composite则靠dataPropertyNameComposite指定要叠加的第二张图属性名(比如把 logo 盖到商品图上)。多步的源码实现在 packages/nodes-base/nodes/EditImage/EditImage.node.ts,参数校验规则都在里面。
输出选项:改名、转格式、压体积
加工完的图怎么出去?在Edit Image的Options里加三项就够:
options: destinationKey: data fileName: "{{ $json.filename }}-400.jpg" format: jpeg quality: 80fileName支持表达式,把上游字段带进输出文件名;format支持 bmp/gif/jpeg/png/tiff/webp;quality只对 jpeg、png、tiff 生效,80 左右肉眼几乎看不出差别,体积能省一半。最后再接一个Read/Write Files from Disk(operation: write),把处理结果落到指定目录。
批量场景不用额外配置:Edit Image 天然逐行处理输入,上游读进来多少张,它就按 item 顺序产出多少张。某张图坏了,把该节点设为"出错时继续"(continue on fail),失败行会以{ error: "..." }继续往下走,你在日志里能直接看到是哪张图、什么原因,再单独补跑失败的那几张。
如果你的场景不一样
| 场景 | 链路差异 |
|---|---|
| 电商批量缩略图 | multiStep 固定为 crop→resize→quality 80,文件名用 SKU 字段拼接 |
| 社交平台多规格配图 | 一个 Edit Image 接两个分支,各自 resize 到 1080x1080 和 1200x630 |
| 图片质检 | operation: information,把分辨率、格式写回 json 落库,不产出图片 |
避坑清单
- 执行报 GraphicsMagick 相关错误:自部署实例没装 ImageMagick。Docker 部署直接装 ImageMagick 并重启容器,源码里
gm调用全部依赖它。 - text 操作报 "Default font not found":默认只找系统 Arial;Linux 服务器常没有,在
font选项里从系统字体里选一个即可。 quality填了却没效果:该参数只对 jpeg/png/tiff 生效,输出 webp 时不生效。- 大批量处理超时:几百张图逐行串行会拖很久,按 100 张一批拆执行;同时留意实例内存上限,别开太高并发。
- 一张坏图拖垮整批:不开"出错时继续"的话单条失败即终止,批量场景一定要打开再配告警。
n8n 图片自动化处理的本质,就是拿一个磁盘节点供料、一个 Edit Image 节点加工,再叠上批量与容错。节点实现见 packages/nodes-base/nodes/EditImage/EditImage.node.ts,读写盘节点在 packages/nodes-base/nodes/Files/ReadWriteFile/,对着源码改参数最稳。
【免费下载链接】n8nFair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.项目地址: https://gitcode.com/GitHub_Trending/n8/n8n
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考