一个基于Canvas的标注工具的开发历史

2026-02-03 17:26:41 阅读 0评论 2

多年以前,我就想给”林羽凡markdown编辑器“增加一个标注功能,但一直没实现好。

上图是旧版本编辑器中的标注功能

 

虽然我本地有在使用,但总感觉不好用。于是又重新开发了一个可以支持自由拖拽的标注工具。

 

最开始让Ai生成了一个基础样式:

 

这个工具的原理也比较好理解:在开启标注后,生成一个指定宽高和位置的透明Canvas,这个Canvas需要覆盖在各种编辑器上,每个编辑器的位置不同,大小也不同(也可能全屏了),然后在Canvas上绘制各种图案(包括文字)。

Ai生成的首版不好看,也不好用。Canvas定位问题直没有解决,要么是z-index问题导致画不了,或者画了看不到,或者画的东西有变形,总之是问题很,于是换了Ai工具接着调试。

后面调整了Ui界面,看着稍微舒服了一些。

将颜色选择器做成下拉框,节省工具展开的位置。

全屏状态下的画布也做了测试。

马赛克的功能虽然有了,但还是不我满意的效果。

目前的马赛克只支持将指定颜色(颜色下拉框中的颜色)降低明度,找到8个相近的颜色,再生成随机块来模拟马赛克效果。

我希望是在框选一个范围后,通过获取”我看到的“屏幕上的元素的颜色,获取8种相近的颜色,再生成随机色块。但这个难度就是如何获取屏幕上”我看到的“区域内的颜色。

核心思路是在我框选出范围后,程序通过截图把这个框选出的区域放在临时Canvas上,再计算这个canvas中的颜色值。

我试过很多第三方的库,都实现得不好,问题挺多。让Ai写原生的,实现得也不好,要么颜色识别不出来,要么识别出的颜色数量不对(和获取到的对应区域内的dom元素有关系)。

程序并不会”看“到我们看到的页面,我们看到的页面其实是浏览器基于css和js按照一定的规则”画“出来的,或者说是通过事件渲染出来的。我们看到的页面是一个”整体“,或者看到的就是一个平面(通过不同层级和投影)在视觉上看起来是立体的。

后面还得想办法优化这个马赛克功能。

我理想中的马赛克是上图中的样子。只获取我”看“得到的元素的颜色,并随机生成色块。

文章版权声明:除非注明,否则均为林羽凡原创文章,转载或复制请以超链接形式并注明出处。
林羽凡

林羽凡V

林羽凡博客,是一个记录自己生活、互联网技术的原创独立博客 Linyufan.Com

4290 文章
18091 评论
20961972 浏览

了解一下?

  • 了解一下?

活跃朋友

最新留言

    厉害了。。。。。:heo-抬眼镜:
    老司机(FLYER) • 时间 2026年02月24日 10:26:37
    vue博客的网址是啥
    前端练习生 • 时间 2026年02月22日 19:32:03
    程序整好了分享一下呗*
    麻烦修改一下网站 https://www.penlife.cn/:heo-抬眼镜:
    前端练习生 • 时间 2026年02月22日 19:29:36
    新年快乐,祝马上发财,万事如意,大顺大财大吉祥
    爱娃子 • 时间 2026年02月22日 11:50:39
    大佬厉害啊
    爱娃子 • 时间 2026年02月22日 11:49:50
    折腾起来
    别无所求爱娃子 • 时间 2026年02月22日 11:49:05
    :heo-鼓掌::heo-鼓掌::heo-鼓掌:
    热衷于 • 时间 2026年02月21日 17:55:20
    :heo-耍酷:自己会开发还是比较爽的*
    对了你的SSL过期了
    灰常记忆 • 时间 2026年02月19日 23:50:46
    能不能叫你的AI们给你发点钞票?:heo-耍酷:
    wu先生 • 时间 2026年02月18日 09:38:57
    灵蛇辞岁,金马报春*
    新的一年*
    祝你电量满格,快乐超标*
    所有的美好,都奔你而来
    阿和 • 时间 2026年02月17日 14:12:47
    可以让AI成为你的黑奴为你做事情了哈哈哈
    李的日志 • 时间 2026年02月16日 02:08:11
    用自己开发的工具固然是好 但如果是自用 如果是兴趣之上 那还好 如果是开源使用 一个人开发一个人维护 如果没有相应的回报 可能有点上头哦
    刘郎 • 时间 2026年02月15日 08:10:14

再了解一下?

  • 林羽凡待办
取消
支付宝二维码
支付宝二维码
微信二维码