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;
    }
    
  • 相关阅读:
    PostgreSQL 遇到 column "value" does not exist
    FlowPortal BPM官网改版了,推出20个流程免费基础版
    C#代码规范化(代码风格化)的几个函数
    批量更新带有命名空间的XML文件的多个节点值
    旺财C# .NET代码生成器之DTcms4/5代码批量生成功能
    C# Webform中读取Windows AD/LDAP域用户清单
    在吉日嘎拉DotNet.WebForm中使用FluentScheduler调度任务
    修复一个吉日嘎拉MSSQL数据库版中的分页存储过程bug
    基于吉日嘎拉的OA协同办公模块重写
    基于吉日嘎拉的通用权限管理WebForm版扩展:字典选项管理和缓存管理
  • 原文地址:https://www.cnblogs.com/pengdt/p/12368440.html
Copyright © 2011-2022 走看看