灰度化时如何在 canvas 中设置 Alpha 通道
how to set the alpha channel in canvas while grayscaling
我正在使用 HTML canvas
对图像进行灰度化处理,我不想只对它求平均。所以我使用这个函数
var imageData = ctx.getImageData(0,0,canvas.width, canvas.height);
var data= imageData.data
for (var i = 0; i < data.length; i += 4) {
var grayscale = (data[i]*0.2126 + data[i +1]*0.7152 + data[i +2])*0.0722;
data[i] = grayscale; // red
data[i + 1] = grayscale; // green
data[i + 2] = grayscale; // blue
}
ctx.putImageData(imageData, 0, 0);
}
但是问题是,如果图片有白色背景,它会变成黑色。所以尝试了 data[i + 3] = 255;
的 alpha 通道,但这把整个 canvas 变成了黑色。
我做错了什么?
问题出在这一行:
var grayscale = (data[i]*0.2126 + data[i +1]*0.7152 + data[i +2])*0.0722;
请注意,最后一个常量乘以它左侧的 整个 表达式,而它应该只乘以 data[i+2]
:
var grayscale = data[i]*0.2126 + data[i + 1]*0.7152 + data[i + 2]*0.0722;
我正在使用 HTML canvas
对图像进行灰度化处理,我不想只对它求平均。所以我使用这个函数
var imageData = ctx.getImageData(0,0,canvas.width, canvas.height);
var data= imageData.data
for (var i = 0; i < data.length; i += 4) {
var grayscale = (data[i]*0.2126 + data[i +1]*0.7152 + data[i +2])*0.0722;
data[i] = grayscale; // red
data[i + 1] = grayscale; // green
data[i + 2] = grayscale; // blue
}
ctx.putImageData(imageData, 0, 0);
}
但是问题是,如果图片有白色背景,它会变成黑色。所以尝试了 data[i + 3] = 255;
的 alpha 通道,但这把整个 canvas 变成了黑色。
我做错了什么?
问题出在这一行:
var grayscale = (data[i]*0.2126 + data[i +1]*0.7152 + data[i +2])*0.0722;
请注意,最后一个常量乘以它左侧的 整个 表达式,而它应该只乘以 data[i+2]
:
var grayscale = data[i]*0.2126 + data[i + 1]*0.7152 + data[i + 2]*0.0722;