生成二维码

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>生成二维码</title>
    <link rel="stylesheet" type="text/css" href="css/qrcode.css">
	<!-- 引入库文件 -->
	<script src="js/jquery-1.11.3.min.js"></script>
	<script src="js/jquery.qrcode.min.js"></script>
</head>
<body>

    <div>
        <label for="qr_text">URL:</label>      
        <input id="qr_text" type="text" value="" /> 
        <button id="qr_btn" value="button">生成二维码</button>
    </div>

    <div class="cavans_qr">
        <h2>canvas创建二维码</h2>
        <div id="qr_container"></div>
    </div>

    <div class="image_qr">
        <h2>生成二维码图片</h2>
        <div id="imgDiv"></div>
    </div>

    <!-- <div class="image_qr">
        <h2>table创建二维码</h2>
        <div id="code"></div>
    </div> -->

<script type="text/javascript" src="js/qrcode.js"></script>
</body>
</html>

Css:

#qr_text{
    
}
.cavans_qr{
	width: 250px;
	text-align: center;
}
.image_qr{
	width: 250px;
	text-align: center;
}

Js:
 

/*注:空值二维码扫码不到*/

//页面加载完成
$(document).ready(function(){
    // 点击生成二维码--begin
    $('#qr_btn').click(function(){  
        /*如果已生成过二维码,则删除二维码img图片和canvas,重新生成;反之,则直接生成二维码*/
        if($('#imgDiv:has(img)').length!=0){   //#imgDiv:has(img):选取所有包含有<img>元素在其内的id为imgDiv元素;
            $('canvas').remove();   //移除上一个二维码画布
            $('#imgDiv img').remove();  //移除上一个二维码图片 
            createQr();   //执行生成二维码生成函数
        }else{
            createQr();   //执行生成二维码生成函数
        }
    });
    // 点击生成二维码--end

    // 生成二维码--begin
    function createQr(){
        document.createElement('canvas').getContext('2d');   //创建画布
        var valText = $('#qr_text').val();   //获取需要生成二维码数据
 
        // 采用正则表达式判断输入的内容是否是中文--begin
        var reg=/^[\u0391-\uFFE5]+$/; 
        if(valText != "" && !reg.test(valText)){    //test():检测一个字符串是否匹配某个模式
            // 如果不是中文,直接将输入的内容转换成二维码
            $('#qr_container').qrcode({render:"canvas",height:180,width:180,correctLevel:0,text:valText});   //canvas方式;correctLevel:容错级别;colorDark:前景色;colorLight:背景色
            //$("#code").qrcode({render:"table",width: 200,height:200,text:valText});  //table方式 
        }else{
            // 如果是中文,直接将输入的内容字符串转换成UTF-8,然后再转换成二维码
            $('#qr_container').qrcode({render:"canvas",height:180, width:180,correctLevel:0,text:utf16to8(valText)});   //canvas方式
            //$("#code").qrcode({render:"table",width: 200,height:200,text:utf16to8(valText)});  //table方式
        }
        // 采用正则表达式判断输入的内容是否是中文--end
 
        var mycanvas1=document.getElementsByTagName('canvas')[0];   //获取网页中的canvas对象
 
        //将转换后的img标签插入到html中
        var img = convertCanvasToImage(mycanvas1);  //提取图片
        $('#imgDiv').append(img);//imgDiv表示你要插入的容器id
    }
    // 生成二维码--begin
 
    // 字符编码--begin
    function utf16to8(str) {  
        var out, i, len, c;  
        out = "";
        len = str.length;  //获取数据长度 
        for(i = 0; i < len; i++) {  
            c = str.charCodeAt(i);  //charCodeAt(x):返回指定位置(x)的字符的Unicode编码
            if ((c >= 0x0001) && (c <= 0x007F)) {  
                out += str.charAt(i);  //charAt():返回指定位置的字符
            } else if (c > 0x07FF) {  
                out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));  //String.fromCharCode(numX,numX,...,numX):接受一个(或多个)指定的 Unicode 值,然后返回一个字符串
                out += String.fromCharCode(0x80 | ((c >>  6) & 0x3F));  
                out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));  
            } else {  
                out += String.fromCharCode(0xC0 | ((c >>  6) & 0x1F));  
                out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));  
            }  
        }  
        return out;  
    }
    // 字符编码--end
 
    // 从canvas中提取图片image--begin
    function convertCanvasToImage(canvas) {
        //创建新Image对象
        var image = new Image();
        // 指定格式PNG
        image.src = canvas.toDataURL("image/png");   // canvas.toDataURL():返回的是一串Base64编码的URL
        return image;
    }
    // 从canvas中提取图片image--begin

});

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值