0
我正在创建一个具有绘图功能的插件,我想添加一个过滤器按钮。现在,当从下拉列表中选择“灰度”选项时,将调用名为filterImage的函数。代码中显示的make_base函数只是将图像加载到画布中。目前图像出现在画布上,但不应用灰度。我会如何去做这件事?可以在同一个函数中调用make_base函数(放入图像)和灰度滤镜函数吗?使用JavaScript为画布创建过滤器
var canvas = document.getElementById("art-board");
var context = canvas.getContext("2d");
var selectObj = document.getElementById("filter");
var index = selectObj.selectedINdex;
var filter = selectObj[index].value;
make_base(canvas, context);
if(filter=="grayscale"){
filterImage(canvas, context);
}
function filterImage(canvas, context){
imageData = context.getImageData(0, 0, canvas.width, canvas.height),
data = imageData.data,
iLen = data.length;
for (i = 0; i < iLen; i+=4) {
avg = 0.3 * data[i] + 0.59 * data[i + 1] + 0.11 * data[i + 2];
data[i] = avg + 100;
data[i + 1] = avg + 50;
data[i + 2] = avg + 255;
}
context.putImageData(imageData, 0, 0);
}
一个错误您提供:'selectObj.selectedINdex;'应该被修改为'selectObj.selectedIndex;'。另外,我假设你的make_base函数确实将图像加载到一个'new Image()'标记中,并且实际上只是在它的'onload'事件中将其绘制到画布上。您的检查过滤器应包含在此onload或画布将是空的。 – Kaiido