如何擦除画布而不擦除背景

ryu*_*suo 4 javascript html5 canvas

我有一个帆布drawimage()作为背景.

我有一个橡皮擦工具,我希望能够擦除我绘制的内容,但不能删除画布中的图像.我知道可以将图像作为画布后面的单独元素放置,但这不是我想要的,因为我希望将画布中的内容保存为图像.

我的绘图功能在这里:

function draw (event) {     
    if (event == 'mousedown') {
        context.beginPath();
        context.moveTo(xStart, yStart);
    } else if (event == 'mousemove') {
        context.lineTo(xEnd, yEnd);
    } else if (event == 'touchstart') {
        context.beginPath();
        context.moveTo(xStart, yStart);
    } else if (event == 'touchmove') {
        context.lineTo(xEnd, yEnd);
    }
    context.lineJoin = "round";
    context.lineWidth = gadget_canvas.radius;
    context.stroke();                   
}
Run Code Online (Sandbox Code Playgroud)

如果我需要进一步解释,我会.

先感谢您.

Sim*_*ris 5

有几种方法可以解决这个问题.

我建议把图像作为画布的CSS"background-image".然后照常在画布上画画.

如果要将Canvas保存为图像,则需要执行一系列事件:

  1. 创建一个与普通画布一样大的内存中画布.叫它can2
  2. ctx2.drawImage(can1, 0, 0) //将第一个画布绘制到新画布上
  3. ctx.clearRect(0, 0, width, height) //清除第一个画布
  4. ctx.drawImage(background, 0, 0) //在第一个画布上绘制图像
  5. ctx.drawImage(can2, 0, 0) //将(已保存的)第一个画布绘制回自身

这将让您拥有两全其美.