周刊:编辑器模型对齐与 RK3528 部署 OpenClaw 记录
碎碎念
这周基本都泡在画板和编辑器里了。
一开始只是修一些看起来「很具体」的小问题,结果一路挖下去,发现全是底层模型在打架:坐标系、变换原点、文本光标、导出结构……属于那种不一次性理顺,后面一定会反复踩的坑。
但好在最后都捋顺了,也算是一次完整的「编辑器工程学」复习。
工作情况
这周主要集中在画板编辑、PPTX 导出和图片编辑工具链的稳定性上。
首先是 PPT / PPTX 导出相关的问题。
在编辑态一切正常的情况下,导出阶段暴露了不少隐藏假设:
有的公式会被错误地导出成 PNG,而不是 OOXML 公式;
有的 PPT 背景图在导出后异常;
可编辑 PPTX 在某些场景下甚至会直接报错;
竖排文字在画板中没问题,但导出后却完全丢失。
这些问题的共同点是:
导出并不是“把画布存下来”,而是一次严格的结构翻译。
编辑态的渲染结果,不能直接假设为导出态的输入。
为此对 PPTX 导出结果重新做了基准对齐,并补齐了公式和导出相关的 e2e 测试,确保行为是可回归、可验证的。
另一个花了不少时间的是文本编辑。
包括但不限于:
- 竖排文字的光标位置异常
- 某些编辑路径下,竖排文本会退化成横排
- 英文 + 数字 / 英文 + 中文符号混排时,光标会偏一个字符
- 可换行文本中,连续大量空格会导致光标和渲染不一致
这些问题表面看都很零散,但本质高度一致:
都是文本节点的本地坐标、字符索引与渲染宽度之间的映射问题。
一旦自定义了文本节点或编辑逻辑,就不能再依赖浏览器默认行为,
光标、选区、overlay textarea 的坐标换算都得自己兜住。
图片编辑工具这块,这周重点修的是「魔法消除 + 还原工具」的一系列连锁问题。
一开始的表现非常诡异:
魔法消除后画面会变黑;
和局部还原 / 橡皮擦一起用时,会出现黑块;
但只有橡皮擦会触发,矩形、圆形还原却是正常的。
最后定位到的根因其实很“工程”:
橡皮擦的实现方式是通过切透明像素,露出下层 originalImage;
而魔法消除接口返回的是 JPG(没有透明通道);
透明像素在 JPG 里会被当成黑色填充。
于是原本合理的两个设计,组合在一起就炸了。
最终的解决方案是:
不再依赖透明像素透出,而是直接在 renderedImage 上,用 originalImage 对应区域进行像素回写;
同时统一矩形 / 圆形 / 橡皮擦三种还原方式的模型;
并把还原操作从「松手后一次性应用」改为实时生效,保证交互一致性。
这周最值得单独记录的,是 Konva 相关的一个需求冲突。
需求希望给文本节点增加类似 CSS transform-origin 的能力,比如支持 top-left。
但在 Konva 里,这件事本身就是个陷阱。
Konva 并不存在 transform-origin 这个概念,
所有变换(旋转 / 缩放)都是围绕 offsetX / offsetY 发生的。
一旦你强行切换 offset,却没有同步补偿 position:
- 拖拽宽度时节点会整体位移
- 缩放后位置会跳
- 文本光标、选区、编辑态 overlay 会全面失准
看起来像是 Konva “只支持 center center”,
但实际上是需求直觉(CSS 模型)与几何事实(Canvas 变换)发生了冲突。
最后总结出的几个经验结论:
- 能不强制改 origin,就不要改
使用 Transformer 的非居中缩放,并在 transformend 时把 scale 固化进 width / height,对 Text 尤其重要 - 如果必须切换 offset,一定要同时补偿 x / y,保证画面中的那个点不变
- 光标计算必须走绝对变换逆矩阵,任何手写的 x/y 直减都会在复杂场景下翻车
编辑器里 80% 的诡异 bug,本质都是坐标系问题。
总结
这周还尝试部署了 OpenClaw,完整过程单独写了:在 RK3528 ARM 开发板上部署 OpenClaw + Telegram Bot 全记录。
这周整体的感受是:
很多「看起来合理」的需求,其实和底层模型是冲突的;
而一旦涉及编辑、导出、跨格式,就必须对模型保持敬畏。
虽然踩坑很多,但也算是把几个长期隐患一次性清掉了。

