Canvas多边形套索抠图核心是构建闭合路径并调用clip()限定绘制范围:鼠标/触摸记录顶点,转换为像素坐标,beginPath→moveTo→lineTo→closePath绘制,clip()后drawImage仅显示多边形内区域;需save/restore保护图层,支持撤销、悬停检测及边缘柔化。

网页端用 Canvas 实现多边形自由套索抠图,核心不是“擦除像素”,而是动态构建一个闭合多边形路径作为剪辑区域,再用 clip() 限定后续绘制范围——图像只在该区域内显示,其余部分被自然遮蔽。
手动绘制多边形路径
用户通过鼠标点击或触摸逐点标记顶点,Canvas 持续连接线段形成开放轮廓;双击或按回车闭合路径,生成真正可用的裁剪边界。
- 监听
click或touchend事件,记录画布坐标(注意转换为 canvas 像素坐标,需除以devicePixelRatio) - 每次新增点后调用
beginPath()→moveTo()→ 循环lineTo()绘制线段 - 闭合时调用
closePath(),确保路径首尾衔接,否则clip()在部分浏览器中失效
应用剪辑并渲染目标图像
路径闭合后立即生效剪辑,此时绘制图片,Canvas 自动只显示多边形内部区域。
把任意文章或文档内容转换成精美的全屏翻页 HTML 演示文件(幻灯片风格)。当用户发来一篇文章、文档链接、Markdown 内容、或粘贴的文本,并且希望生成演示用的 HTML 时触发。支持任意内容来源:iWiki 链接、KM 链接、本地文件路径、直接粘贴的文本。生成的 HTML 文件保存到本地工作区,并通过企微直接发送给用户。触发词示例:帮我把这篇文章做成PPT、转成演示文档、生成HTML幻灯片、做个演示、转成可以演示的格式、article to deck、make a slide。
- 在绘制路径后、绘制图片前,插入
ctx.clip() - 接着调用
ctx.drawImage(img, 0, 0),图像仅在多边形内可见 - 若需保留原图或其他图层不受影响,提前用
ctx.save()保存状态,操作完用ctx.restore()恢复
支持交互优化与边缘处理
真实使用中需解决点位误触、路径微调、边缘柔化等问题,提升套索精度。
- 提供“撤销上一点”按钮,用数组
pop()删除最后顶点并重绘路径 - 启用
isPointInPath(x, y)判断鼠标是否悬停在当前多边形内,用于高亮或拖拽调整顶点 - 导出前可对剪辑区域做轻微高斯模糊或 Alpha 渐变扩展(手动混合像素),缓解硬边感,尤其适合人像发丝过渡
不复杂但容易忽略:路径必须闭合、坐标要适配高清屏、剪辑只影响后续绘制——这些细节决定套索是否真正可用。

















