写了一堆图形编辑器开发的文章,汇总一下,方便读者朋友在遇到问题时,快速找到对应文章,建议收藏。
如果没找到,或者有什么感兴趣的主题,可以公众号后台给我留言,我看看能不能写篇文章出来。
图形编辑器
如果你需要开发一款图形编辑器,下面这些文章应该能给你一些帮助。
-
《来,教你开发一款图形编辑器》,简单介绍实现图形编辑器需要实现的一些基础模块,重点是模块解耦。
-
《简单介绍一下我在做的图形编辑器》,个人开发的开源图形编辑器 suika 的简单介绍,里面有模块划分的思维导图,可能对你的整体架构有一点帮助。
-
《图形编辑器:适配高分辨率屏幕》,对于高分屏,Canvas 要特殊处理,否则会出现线条模糊的情况。
-
《图形编辑器:历史记录设计》,两种做法,快照和打补丁(patch),后者需要用到命令模式。
-
《图形编辑器:场景坐标、视口坐标以及它们之间的转换》,非常重要。
-
《图形编辑器开发:模块间如何通信?》,主动获取数据通过入口模块 editor 对象,被动拿到数据并执行方法使用发布订阅事件。
工具模块
-
《图形编辑器开发:最基础但却复杂的选择工具》,选择工具非常复杂,承载了大量的功能,比如单选、框选、连选、移动、通过控制点修改图形属性。
-
《图形编辑器开发:绘制图形工具》,如何实现绘制图形的工具类,这里特指一次鼠标按下、拖拽然后释放,基于绘制的矩形区域,就完成绘制出一个图形(比如矩形、椭圆)的场景。
-
《图形编辑器开发:缩放和旋转控制点》,在选中图形上显示控制点,通过拖拽控制点进行缩放以及选择图形操作。
-
《图形编辑器开发:钢笔工具功能说明书》,钢笔工具功能交互说明,理解这个有助于正确实现钢笔工具。
更新图形属性
-
《图形编辑器:旋转选中的元素》,通过旋转控制点旋转单个或多个图形。
-
《图形编辑器:修改图形x、y、width、height、rotation》,通过输入框修改
画布缩放
-
《图形工具的另一种以光标为中心缩放实现》,基于渲染引擎的缩放画布
UI 层相关
-
《图形编辑器开发:属性显示与格式转换》,数据层和 UI 层的属性有时候会不一样,典型例子就是弧度和角度,对此需要额外的转换处理。
-
《图形编辑器开发:实现自定义规则输入框组件》,实现上面一点,需要的一个底层通用组件。
其他
-
《图形编辑器开发:加新的图形类型,触发丝滑小连招》,本文讲述了当我们要增加一个新的图形类型时,要做的一系列工作,以及一些注意事项。编辑器的功能越多越复杂,要做的工作就越多。
-
《图形遍历效率低?试试 R 树》,使用 R 树进行图形的快速索引,减少遍历次数,空间换时间。
-
《图形编辑器:绘制图形需要用到的填充算法》,容器填充算法。
-
《图形编辑器开发:是否要像 Figma 一样上 wasm》,对于是否要使用 WASM 实现图形工具的思考
Figma 技术调研
Figma 作为顶流的 Web 端图形编辑器,且团队有不少公开的技术分享资料,非常值拿来研究学习。
- 《什么?Figma 的 fig 文件格式居然解析出来了》,fig 格式介绍和解析,另外推荐 Figma-To-JSON 开源 fig 解析工具
现在推荐 Figma CTO 写的 fig 解析工具,解析更完整:
-
《学到了!Figma 原来是这样表示矩形的》,Figma 的图形支持 transform 变换,以实现斜切功能,兼容 SVG。
CRDT 协同编辑算法
-
《这一次,彻底搞懵 CRDT》,CRDT 入门文章。
-
《Figma 是如何做协同编辑的?》Figma 早期(2019)使用的类 CRDT 协同编辑方案,后面不知道有没做更改。
-
《Figma 在协同编辑中使用的顺序一致性算法:Fractional indexing》同层级图形在协同后,如何保证最终顺序一致。
-
《CRDT 协同编辑:另一种顺序一致性算法 Tree-Based Indexing》,基于树的顺序一致性算法
平面几何算法
实现几何算法是很好玩的事情,有点像 LeetCode 刷题。
有时候需要写一些简单可视化交互来辅助验证正确性,尤其是复杂算法。
-
《在容器内显示图片的五种方案:contain、cover、fill、none、scale-down》,图片填充到矩形容器,缩放画布会用到。
-
《给定一个边与边可能相交的多边形,求它的轮廓线》,一种多边形填充算法,使用了多个基础算法,较复杂;
开源图形编辑器架构
-
《SVGEdit:老牌开源 SVG 编辑器是如何架构的?》,SVG 编辑器,很老的开源项目了,有不少小问题,但整体功能是比较完善的。
-
《开源白板工具 Excalidraw 架构解读》,非常受欢迎的手绘风白板工具,但代码实现耦合严重,可读性差,不推荐细读源码,辣眼睛。
结尾
我是前端西瓜哥,欢迎关注我,学习更多图形编辑器知识。