从“零图形背景”到“海报编辑器上线”:与 LeaferJS 相爱相杀的日子

41 阅读4分钟

前言

大家好,我是Ranbow!

去年团队上线了一款在线设计工具 《图鲸灵》,主要功能是海报编辑、批量图片处理、以及AI生成图片,感兴趣的小伙伴可以体验一下 ~

图形编辑核心选择了 LeaferJS,项目期间做了很多小工具,一起分享给大家。助力大家快速完成项目开发。如果你对细节感兴趣,请听我娓娓道来。

1. 缘起:为什么选它?

  • 背景

    • 原本ERP系统中有一个专用的图片处理功能,是纯dom写的,元素多卡顿只是痛点之一,最头疼的其实是导出图片性能慢,导出图片截图效果不好
    • 接到“海报编辑器”需求,根据以往经验,必须得上Canvas了,但我无图形学背景,面对 Canvas/SVG/WebGL 一脸懵。
  • 选型纠结:对比 Fabric.js, Konva, PixiJS 等,最终为何锁定 LeaferJS

    • 爱点:文档友好、性能惊艳(百万级渲染)、国产之光的情怀加分。
    • 期待:以为选了它就能 “躺赢”,快速上线。
    • 痛点:上手第一周,被坐标 “local、world、page” 绕晕。

2. 生态现状 & 感谢开源

早期我入局的时候,还在快速发展,官方付费高级插件体系还未建立。

生态的建设者 (取之于开源回馈开源)

1. Leafer 吸附线插件

在开源吸附线的基础上,结合自己产品需要进行了重新设计与加强

image.png

2. Leafer 图片裁剪编辑器

这个插件主要核心点是裁剪的思路:通过一个容器包裹一个裁剪元素(图片或其他);通过容器包裹的方式,改变子元素在容器中的位置,实现裁剪效果。

随后官方出了很好用的裁剪插件专门对 Rect等元素进行裁剪;不过我还是很喜欢我的裁剪方案,因为沿着我的裁剪思路其实我可以裁剪万物...

后续在此基础上实现了整个画板级的整体裁剪,裁剪后子元素位置更新到视觉位置,并支持后续继续移动编辑等(业务逻辑关联强,后续未开源)

image.png

3. 撤销重做

很久之前我就知道稿定Inc开源了一个状态管理库(StateShot)。我在此基础上进行了文档汉化和代码TS语法重构,原则上用谁的都一样,我的TS支持好一些。

基于结构共享的非侵入式历史状态管理。如需深入了解建议阅读 核心概念;利用此库,可以有效减小数据变动后存储的数据量,避免内存爆炸。

4. Leafer 特效文字插件

一个功能强大的 Leafer UI 特效文字插件,支持多层文字特效叠加,实现描边、阴影、渐变等丰富的视觉效果。

image.png

5. Leafer 二维码插件

Leafer UI 二维码插件, 根据文本自动生成二维码,支持中心小图标

image.png

6. Leafer 水印插件

Leafer UI 水印插件,支持基于父容器的平铺水印、和局部平铺水印。

  • 推动官方支持了水印错位效果(原本是自己魔改实现,Leafer 2.0.0版本interlace支持)
  • 项目地址:leafer-x-watermark
  • PlayGround:预览体验

image.png

好玩的功能

1. 马赛克、高斯模糊功能

这个是基于画板背景的,实现起来也是很复杂, 马赛克既是个元素可编辑,又不能影响其他元素的渲染,多个马赛克衔接还要自然

思路:

  • 把父容器渲染Render部分拿出来修改
  • 利用 filter 滤镜先计算父容器的整体马赛克
  • 再把马赛克元素所在区域抠出来独立渲染,渲染后子元素继续渲染

image.png

image.png

2. 切图下载

实现了编辑切图大小实时渲染蚂蚁线分割,实时看到切图区域,效果很棒~

image.png

3. 高性能渲染

画板编辑时底部预览图实时渲染,这个不起眼的小功能我当初头疼了很久;画板数量多的时候,又要渲染,又要保存数据(含预览图)到服务端,性能也是十分的灾难。

  • 除了常规的防抖,还有一套 “快照管理服务”,便于在各种场景下获取高性能预览图。
  • 还要精准找到需要重新渲染的目标画板,避免性能浪费。

PixPin_2026-03-20_13-10-37.gif