javascript – 在html5中将图像的颜色更改为灰度

我有一个png图像,我想转换成灰度级.我设法将其转换为灰度,但它也会改变图像透明度的颜色.如何在不改变图像的透明区域的情况下更改其颜色?
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var img = new Image();
img.src = 'image.png';
ctx.drawImage(img,0);

var imageData = ctx.getimageData(0,420,420);
var px = imageData.data;

var len = px.length;

for (var i = 0; i < len; i+=4) {
    var redPx = px[i];
    var greenPx = px[i+1];
    var bluePx = px[i+2];
    var alphaPx = px[i+3];

    var greyScale = redPx * .3 + greenPx * .59 + bluePx * .11;

    px[i] = greyScale;
    px[i+1] = greyScale;
    px[i+2] = greyScale;
    px[i+3] = greyScale;
}

ctx.putimageData(imageData,0);

解决方法

阿尔法是“不是一种颜色”.您应该将其原样复制,使透明部分透明.只需删除行:
px[i+3] = greyScale;

相关文章

什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据...
前言 今天复习了一些前端算法题,写到一两道比较有意思的题:...
最近在看回JavaScript的面试题,this 指向问题是入坑前端必须...
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面