HTML5 canvas标签-2 简单的3种滤镜

在发现canvas有这么多功能后,我首先尝试着去做一些滤镜

最基本的就是胶片 这个在w3school上有demo

假设原本颜色为rgb(r,g,b);只需要将它变成rgb(255-r,255-g,255-b);即可

原图处理后的

       for (var i=0;i<canvas.width;i++){
            for (var j=0;j<canvas.height;j++){
                var currentPixel = 4*canvas.width*j + 4* i;
                data.data[currentPixel] = 255-data.data[currentPixel];
                data.data[currentPixel+1] = 255-data.data[currentPixel+1];
                data.data[currentPixel+2] = 255-data.data[currentPixel+2];
            }
        }
        ctx.putImageData(data,0,0);</span>


接下来介绍的是灰度化 这是图像处理中比较重要的一种处理。这里先介绍最基本的一种 就是运用灰度化公式实现的 f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j)) (加权平均法)

这是处理后的

代码

        for (var i=0;i<canvas.width;i++){
            for (var j=0;j<canvas.height;j++){
                var currentPixel = 4*canvas.width*j + 4* i,
                    r = data.data[currentPixel],
                    g = data.data[currentPixel+1],
                    b = data.data[currentPixel+2],
                    gray = 0.3*r+0.59*g+0.11*b;
                data.data[currentPixel] = gray;
                data.data[currentPixel+1] = gray;
                data.data[currentPixel+2] = gray;
            }
        }
        ctx.putImageData(data,0,0);</span>


最后再介绍一下雾化算法 其实很简单 雾化就是打散附近的像素点

这就是我实现的雾化 类似毛玻璃效果

代码

        for (var i=0;i<canvas.width;i++){
            for (var j=0;j<canvas.height;j++){
                var num = Math.floor(Math.random()*randNum);
                var deltaX,deltaY;
                (i+num)<=canvas.width?deltaX=i+num:deltaX = i-1;
                (j+num)<=canvas.height?deltaY=j+num:deltaY = j-1;
                var currentPixel = 4*canvas.width*j + 4* i;
                var deltaPixel = 4*canvas.width*deltaY+4*deltaX;
                data.data[currentPixel]=data.data[deltaPixel];
                data.data[currentPixel+1]=data.data[deltaPixel+1];
                data.data[currentPixel+2]=data.data[deltaPixel+2];
            }
        }
        ctx.putImageData(data,0,0);


这里就先介绍三种最简单的滤镜 以后有时间再补充


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值