如何在一张图片上做涂鸦/涂抹,并支持导出相关轨迹图(内含在线演示地址)
如何在一张图片上做涂鸦(功能持续更新)
一、支持的功能
二、实现思路
Q1:如何在图片上实现涂鸦功能?
Q2:如何实现更改笔刷颜色和宽度功能?
Q3:如何实现撤回功能?
Q4:如何实现清空画布的功能?
Q5:在不改变当前画布上内容的情况下,如何将用户涂鸦的内容转成一张黑底白色轨迹的图片?
三、完整代码
四、在线演示
一、支持的功能
在图片上进行涂鸦
支持撤回最近一次涂鸦操作
支持清空画布
支持将用户涂鸦的内容转成一张黑底白色轨迹
二、实现思路
Q1:如何在图片上实现涂鸦功能?
可以在元素上叠加一个
Q2:如何实现更改笔刷颜色和宽度功能?
创建一个名为 ctx 的常量保量,用于表示 Canvas 的 2D 绘图上下文(通过 getContext('2d') 方法获得)。这个上下文对象允许我们在 Canvas 上进行绘制操作。 笔刷的颜色和宽度分别由ctx.strokeStyle和 ctx.lineWidth控制。
Q3:如何实现撤回功能?
需要创建一个数组,用来存储绘图的历史记录。 比如说我们新建了 drawingHistory 数组来存储 Canvas 的状态,每当鼠标抬起时,将当前 Canvas 的数据 URL 存入数组。 当用户点击“撤回”按钮时,我们从历史记录数组中移除最后一步,然后清除 Canvas 并取出历史记录中的最近一次记录进行绘制。
Q4:如何实现清空画布的功能?
需要创建一个数组,用来存储绘图的历史记录。 比如说我们新建了 drawingHistory 数组来存储 Canvas 的状态,每当鼠标抬起时,将当前 Canvas 的数据 URL 存入数组。 当用户点击“清空画布”按钮时,我们清空历史记录数组,然后清除 Canvas 。
Q5:在不改变当前画布上内容的情况下,如何将用户涂鸦的内容转成一张黑底白色轨迹的图片?
创建一个新的 canvas 元素,设置新 canvas 的宽度和高度与原始 canvas 相同。在新 canvas 上绘制黑色背景,将原始 canvas 上的图形绘制到新 canvas 上。
三、完整代码
你可以在下图中做任意涂鸦:
ref="$canvasRef" @mousedown="startDrawing" @mousemove="draw" @mouseup="stopDrawing" />

