一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

canvas的神奇用法

时间:2022-06-25 18:08:40 编辑:袖梨 来源:一聚教程网

canvas有一个神奇的方法getImageData这个玩意。它可以获取canvas内图像的没一个像素点的颜色值获取,而且可以改变。

如果你有各种滤镜的算法。那么用canvas就可以实现图片的滤镜转化,可以做成类似美图秀秀那样的功能。

使用方法:

1:先将图片导入画布。

2:var canvasData = context.getImageData(0, 0, canvas.width,  canvas.height);   //用这个将图片每个像素点的信息获取出来,得到一个数组。注意得到的信息不是[[r,g,b,a],[r,g,b,a]]这样的二维数组而是[r,g,b,a,r,g,b,a]这样的按rgba顺序排列的单个的数组。

3:这一步就是开始将每个像素的rgba改变。这里简单介绍一下灰度效果的算法及实现步骤。

 代码如下复制代码

functiongray(canvasData)

{

for(varx = 0; x < canvasData.width; x++) {

 for(vary = 0; y < canvasData.height; y++) {

 // Index of the pixel in the array

 varidx = (x + y * canvasData.width) * 4;

 varr = canvasData.data[idx + 0];

 varg = canvasData.data[idx + 1];

 varb = canvasData.data[idx + 2];

 vargray = .299 * r + .587 * g + .114 * b;

 // assign gray scale value

 canvasData.data[idx + 0] = gray;// Red channel

 canvasData.data[idx + 1] = gray;// Green channel

 canvasData.data[idx + 2] = gray;// Blue channel

 canvasData.data[idx + 3] = 255;// Alpha channel

 // add black border

 if(x < 8 || y < 8 || x > (canvasData.width - 8) || y > (canvasData.height - 8))

 {

  canvasData.data[idx + 0] = 0;

  canvasData.data[idx + 1] = 0;

  canvasData.data[idx + 2] = 0;

 }

 }

}

returncanvasData;

}

4:context.putImageData(canvasData, 0, 0); //处理完像素颜色值之后,记得要这一句将画布重绘

热门栏目