zoukankan      html  css  js  c++  java
  • 彩色二维码

    配合qrcode使用

    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <script src="https://cdn.bootcss.com/jquery.qrcode/1.0/jquery.qrcode.min.js"></script>
    </head>
    <body>
    <div id="output"></div>
    <div style=" 500px;height: 500px;" id="can">
    	<img src="" id="img" style=" 100%;">
    </div>
    
    var out = $('#output').qrcode("http://qq932.com?name=name&aaa=asdasdasd").find('canvas')[0]
    // var base64 = out.toDataURL('image/jpeg');
    
    var canvas = document.createElement("canvas");
    var ctx = canvas.getContext("2d");
    var w = 1000;
    var h = 1000;
    canvas.width = w;
    canvas.height = h;
    ctx.drawImage(out,0,0,w,h)
    
    var imgData = ctx.getImageData(0, 0, w, h);
    // 整个底色
    rectReplace(imgData,0,0,w,h,{r:255,g:255,b:255},{r:70,g:124,b:200})
    
    // 四个角
    rectReplace(imgData,0,0,w*0.4,h*0.4,{r:255,g:255,b:255},{r:4,g:88,b:200})
    rectReplace(imgData,w*0.6,0,w*0.4,h*0.4,{r:255,g:255,b:255},{r:250,g:120,b:20})
    triangleReplace(imgData,0,h*0.6,w*0.4,h*0.4,{r:255,g:255,b:255},{r:120,g:120,b:210},3)
    rectReplace(imgData,w*0.6,h*0.6,w*0.4,h*0.4,{r:255,g:255,b:255},{r:200,g:120,b:150})
    
    triangleReplace(imgData,w*0.1,h*0.3,w*0.5,h*0.5,{r:255,g:255,b:255},{r:220,g:0,b:200},3)
    triangleReplace(imgData,w*0.2,h*0.2,w*0.5,h*0.5,{r:255,g:255,b:255},{r:180,g:25,b:210},2)
    triangleReplace(imgData,w*0.3,h*0.3,w*0.6,h*0.6,{r:255,g:255,b:255},{r:210,g:63,b:110},4)
    
    ctx.putImageData(imgData, 0, 0);
    
    var base64 = canvas.toDataURL('image/jpeg');
    $('#img').attr("src",base64)
    
    // 矩形像素替换
    function rectReplace(imageData,x,y,w,h,sourceColor,replaceColor){
        var x = x || 0,
            y = y || 0,
            w = x + w || imageData.width,
            h = y + h || imageData.height;
        if(x<0 || y<0 || w>imageData.width || h>imageData.height){
            throw new Error("error params!");
        }
        for(var j=y;j<h;j++){
            for(var i=x;i<w;i++){
                var index = j * imageData.width + i,
                    r = imageData.data[4*index],
                    g = imageData.data[4*index+1],
                    b = imageData.data[4*index+2];
                // 这个规则可以注释掉,也可以改成等于等于,看需求
                if(r!=sourceColor.r && g!=sourceColor.g && b!=sourceColor.b){
                    if(replaceColor){
                        imageData.data[4*index] = replaceColor.r;
                        imageData.data[4*index+1] = replaceColor.g;
                        imageData.data[4*index+2] = replaceColor.b;
                        imageData.data[4*index+3] = 255;
                    }else{
                        imageData.data[4*index+3] = 0;
                    }
                }
            }
        }
        return imageData;
    }
    
    function triangleReplace(imageData,x,y,w,h,sourceColor,replaceColor,type=3){
        if(w!=h){
          console.log("宽高传参需要一样");
          return; 
        }
        var x = x || 0,
            y = y || 0,
            w = x + w || imageData.width,
            h = y + h || imageData.height;
        if(x<0 || y<0 || w>imageData.width || h>imageData.height){
            throw new Error("error params!");
        }
        if(type==3){
            w = x+1;
        }else if(type==4){
            var t = 1;
        }
        for(var j=y;j<h;j++){
            if(type==4){
                x = w-t;
            }
            for(var i=x;i<w;i++){
                var index = j * imageData.width + i,
                    r = imageData.data[4*index],
                    g = imageData.data[4*index+1],
                    b = imageData.data[4*index+2];
                // 这个规则可以注释掉,也可以改成等于等于,看需求
                if(r!=sourceColor.r && g!=sourceColor.g && b!=sourceColor.b){
                    if(replaceColor){
                        imageData.data[4*index] = replaceColor.r;
                        imageData.data[4*index+1] = replaceColor.g;
                        imageData.data[4*index+2] = replaceColor.b;
                        imageData.data[4*index+3] = 255;
                    }else{
                        imageData.data[4*index+3] = 0;
                    }
                }
            }
            if(type==1){
                w--;
            }else if(type==2){
                x++;
            }else if(type==3){
                w++;
            }else if(type==4){
                t++;
            }
        }
        return imageData;
    }
    
  • 相关阅读:
    Redis Cluster 剔除节点失败
    redis cluster 常用操作
    pika版本特性研究
    ueditor的集成
    pyhon类
    python之eval简述
    Python:list,tuple
    Python函数式编程学习:lambda, map, reduce, filter、sorted()、lambda、decorator
    Python中字典详解
    Python调用(运行)外部程序
  • 原文地址:https://www.cnblogs.com/pengdt/p/12368440.html
Copyright © 2011-2022 走看看