• Canvas举个栗子


    下面举一些小例子:

    先假设的创建一个上下文环境

      

    1 var mycanvas = document.getElementById("mycanvas");
    2 var context = mycanvas.getContext("2d");

    1.canvas做灰色图像:

    个人认为主要的知识点在于:

        (1)获取当前画布中图像的各个像素点的值;

        (2)灰色图像的求解方式(r+g+b)/3,再将这个值赋给原来的像素的R、G、B;

        (3)在用新的颜色值画一张图片

     1 //此处就忽略图片预加载的步骤直接写关键点
     2 //获取画布中的像素点
     3 var imgData = context.getImageData(0,0,myCanvas.width,myCanvas.height);
     4 var pixels = imgData.data;
     5 
     6 //获取每个像素点的rgb
     7 for(var i=0; i<pixels.length; i+=4){
     8     var r = pixels[i];
     9     var g = pixels[i+1];
    10     var b = pixels[i+2];
    11     var gray = (r+b+g)/3;
    12     pixels[i] = gray;
    13     pixels[i+1] = gray;
    14     pixels[i+2] = gray;
    15 }
    16 //重新绘制一张灰色的图片
    17 context.putImageData(imgData,100,100);    

     2.canvas刮刮乐

    个人认为主要的知识点:

      (1)在网页中用画布去遮盖原来的img图片;

      (2)使用图像组合模式中的"destination-out",当有两个图像重合额时候保留原图未重合部分,其他置于透明;

      (3)canvas中添加事件;

      (4)当画布中的透明区域大于整个画布的百分之多少的时候,清空整个画布

    //绘制蒙版
    context.fillStyle = "#CCCCCC";
    context.fillRect(0,0,myCanvas.width,myCanvas.height);
    //设为组合模式中的一种        
    context.globalCompositeOperation = "destination-out";
    //定义需要的变量
    var startX = 0;
    var startY = 0;
    var isDown = false;
    myCanvas.onmousedown = function(e){
        isDown = true;
        startX = e.offsetX;
        startY = e.offsetY;
        
    }
    myCanvas.onmousemove = function(e){
        if(!isDown){
            return;
        }
        var endX = e.offsetX;
        var endY = e.offsetY;
        context.beginPath();
        context.moveTo(startX,startY);
        context.lineTo(endX,endY);
        context.lineWidth = 40;
        context.lineCap = "round";
        context.stroke();
        startX = endX;
        startY = endY;
        //上一次的终点是新的起点
        var b = baifenbi();
        if(b>0.4){
            myCanvas.style.display = "none";
        }
        
    }
    myCanvas.onmouseup = function(){
        isDown = false;
    }
    
    function baifenbi(){
        var count = 0;
        var imgData = context.getImageData(0,0,myCanvas.width,myCanvas.height);
        var pixels = imgData.data;
        for(var i=0; i<pixels.length; i+=4){
            var a = pixels[i+3];
            if(a<128){
                count++;
            }
        }
        var b = count/(pixels.length/4);
        return b;
    }

      

  • 相关阅读:
    深拷贝和浅拷贝
    【.NET MVC分页】.NET MVC 使用pagelist 分页
    Win10开启IIS
    Win10开启IIS
    目前问题:plupload上传带参数到后台
    目前问题:plupload上传带参数到后台
    jquery怎样获取html页面中的data-xxx
    .Net MVC删除图片
    .Net MVC删除图片
    AlloyClip的简单使用
  • 原文地址:https://www.cnblogs.com/qqm16113/p/6413395.html
Copyright © 2020-2023  润新知