HTML画布,使用灰度图像作为遮罩

时间:2017-04-06 09:47:31

标签: javascript html canvas image-masking

我正在尝试应用蒙版,因为它可以在Photoshop中使用。黑色透明,白色可见。但是,我认为复合模式不允许这样做。

我只能找到使用alpha通道的模式,但我想将jpg用于较小的文件大小...

1 个答案:

答案 0 :(得分:4)

使用getImageData和putImageData访问原始像素数据

您需要手动移动像素。

要执行此操作,请加载图像,将其放到画布上,获取画布像素。转换为灰度并移至alpha。然后将像素放回画布上。

var mask;
var image = new Image;
image.src = "image name.jpg";
image.onload = function(){
    var canvas = document.createElement("canvas");
    canvas.width = this.width;
    canvas.height = this.height;
    var ctx = canvas.getContext("2d");
    ctx.drawImage(this,0,0);
    var data = ctx.getImageData(0,0,this.width,this.height);
    var i = 0;
    while(i < data.data.length){
        var rgb = data.data[i++] + data.data[i++] + data.data[i++];
        data.data[i ++]  = rgb / 3;
    }
    ctx.putImageData(data,0,0);
    mask = canvas;
}

一旦加载蒙版是图像的副本,alpha通道包含RGB通道的平均值。

使用它

// ctx is the canvas context you want to draw to with the mask

if(mask){
     ctx.globalCompositeOperation = "destination-out";
     ctx.drawImage(mask,0,0);
     ctx.globalCompositeOperation = "source-over";
}