擦除画布绘制的png图像

Erasing a png image drawn by a canvas

本文关键字:png 图像 绘制 布绘制 擦除      更新时间:2023-09-26

我正在为ipad开发html5应用程序。我想在画布元素中显示一个图像,下面有一个背景图像。当用户在画布上的图像上擦拭手指时,它应该擦除以显示背景图像。这是我开始的代码。现在我只是想画一条透明的线来显示背景图像。我稍后再考虑触摸事件。什么好主意吗?

        function draw() {
            var ctx = document.getElementById('canvas').getContext('2d');
            var img = new Image();
            img.src = 'Lord-of-Bones.png';
            img.onload = function(){
                ctx.drawImage(img,0,0);
                ctx.globalCompositeOperation = "copy";
                ctx.strokeStyle = "rgba(0,0,0,0)";
                ctx.beginPath();
                ctx.moveTo(30,96);
                ctx.lineTo(70,66);
                ctx.lineTo(103,76);
                ctx.lineTo(170,15);
                ctx.stroke();
            }
        } 

这就是我最终的工作。

var imageData = context.getImageData(x,y,50,50);
var data = imageData.data;
for (var i = 0; i < data.length; i+=4) {
    data[i] = 0; //red
    data[i+1] = 0; //green
    data[i+2] = 0; //blue
    data[i+3] = 0; //alpha
}
context.putImageData(imageData, x, y);

我认为复合操作不应该是复制,而应该是目的地输出。

https://developer.mozilla.org/samples/canvas-tutorial/6_1_canvas_composite.html

另一种获得这种工作的方法是直接从上下文的ImageData中清除像素数据

您可以在一个画布上绘制图像,并在另一个具有更高z-index的画布上绘制要擦除的遮罩。