通过jquery-qrcode在线生成二维码
随着移动互联网的发展,二维码现在应用得越来越广泛了,随手扫扫就可以浏览网站、加个好友什么的,比起手工输入真的是方便太多了。
前期做了一个综合测评系统,考虑逐步实现移动化,一长串的IP地址用户输入也不方便,借助二维码的话,用户拿起手机扫扫就可以直接进入系统。
基于这个应用场景,就上网研究下了网站二维码的实现方式,归纳起来有以下两种:
1、借助一些二维码生成网站或者二维码生成器生成二维码图片,然后挂在网站上,如码云 QR-Code (二维码) 在线生成器
优点:开发成本为零,能够快速实现多样化的二维码;
缺点:变更二维码的维护略显麻烦
2、在后端利用java或.net代码生成二维码图片,再在网站上引用图片,如qrcode、zxing等
优点:可定制性强,可快速批量生成
缺点:重量级实现方式,对于简单应用来讲开发成本较高
3、在前端页面通过javascript等方式即时生成为二维码(ˇ?ˇ) ,如jquery-qrcode
优点:轻量级实现方式,减少图片IO,节省流量
缺点:不适合复杂二维码的生成
当然在实际应用中,这三种实现方式也不是完全孤立的,我们也可以根据项目实际情况结合应用,最大限度地提高效率、节约成本。
晚上时间也不多就选了个jquery-qrcode研究下。
jquery-qrcode
jquery-qrcode是一个能够在浏览器端生成二维码的jquery插件。它是独立的,最小压缩之后不足4k,也没有图片下载请求。引入该类库之后,只需要一行代码,就可以很容易在web页面加上二维码。
其托管在github上:https://github.com/jeromeetienne/jquery-qrcode
jquery-qrcode主要包含两个文件:
1、qrcode.js:二维码算法实现类
2、jquery.qrcode.js:用jquery将qrcode.js封装起来,根据用户参数,实现canvas及table两种方式渲染生成二维码
压缩之后的只有一个文件jquery.qrcode.min.js。
代码实现
github上其实已经有了非常详细的使用说明及示例,在此就不多做说明了。
不过为了方便今后使用,我还是结合网络上大家的使用心得重新整理一份代码。
jquery-qrcode.html代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>通过jquery-qrcode生成二维码</title>
</head>
<body>
<!-- 引入百度CDN公共库的压缩版jQuery -->
<script src="http://libs.baidu.com/jquery/2.0.3/jquery.min.js"></script>
<!--引入压缩版jquery.qrcode.js -->
<script src="jquery.qrcode.min.js"></script>
<!--未压缩则需要引入两个文件jquery.qrcode.js和qrcode.js -->
<!--jquery.qrcode.js:jquery封装渲染类库 -->
<!--<script src="jquery.qrcode.js"></script>-->
<!--qrcode.js:二维码核心计算类库 -->
<!--<script src="qrcode.js"></script>-->
<script src="jquery.qrcode.min.js"></script>
<!--解决中文乱码问题,引入utf16t8.js -->
<script src="utf16to8.js"></script>
<p>用canvas渲染(http://www.cnblogs.com/scaleworld/)</p> <div id="qrcodeCanvas"></div>
<p>用table渲染(量衡天下博客:http://www.cnblogs.com/scaleworld/)</p> <div id="qrcodeTable"></div>
<script>
//最简用法,render默认是canvas
$('#qrcodeCanvas').qrcode("http://www.cnblogs.com/scaleworld/");
//完整用法,有默认值的均可省略
$('#qrcodeTable').qrcode({
text: utf16to8("量衡天下博客:http://www.cnblogs.com/scaleworld/"),//二维码包含的内容,默认只支持英文内容,中文会乱码,通过utf16to8转码可支持中文
render: "table",//渲染方式可选择canvas或table,默认是canvas,canvas方式还支持右键图片下载
width: 256,//宽度,默认是256
height: 256,//高度,默认是256,建议宽度和高度保持一致,否则不容易被识别
typeNumber: -1,//计算模式,默认是-1
//correctLevel: QRErrorCorrectLevel.H,//纠错等级,默认是QRErrorCorrectLevel.H,但是加上correctLevel这一行后无法渲染出二维码
background: "#ffffff",//背景颜色,默认是白色
foreground: "#000000"//前景颜色,默认是黑色
});
</script>
<body>
</html>
utf16to8.js
基于官方示例测试,我们会发现识别出来的中文二维码会是乱码。
根据园友心存善念的解释:
这跟js的机制有关系,jquery-qrcode这个库是采用 charCodeAt() 这个方式进行编码转换的,
而这个方法默认会获取它的 Unicode 编码,一般的解码器都是采用UTF-8, ISO-8859-1等方式,
英文是没有问题,如果是中文,一般情况下Unicode是UTF-16实现,长度2位,而UTF-8编码是3位,这样二维码的编解码就不匹配了。
解决方式当然是,在二维码编码前把字符串转换成UTF-8
因此我们可以借助utf16to8.js解决这个问题,具体代码如下:
function utf16to8(str) {
    var out, i, len, c;
    out = "";
    len = str.length;
    for (i = 0; i < len; i++) {
        c = str.charCodeAt(i);
        if ((c >= 0x0001) && (c <= 0x007F)) {
            out += str.charAt(i);
        } else if (c > 0x07FF) {
            out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
            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;
}
大家也可以上我的github下载这些代码。
应用效果

通过jquery-qrcode在线生成二维码的更多相关文章
- 使用jquery.qrcode.js生成二维码
		通常生成二维码的方式有两种:第一种是java代码的形式,第二种是通过Js方式. 在这里我做个记录,用js生成二维码,可以在官网下载源码:http://jeromeetienne.github.io/j ... 
- 转: jquery.qrcode.js生成二维码插件&转成图片格式
		原文地址: https://blog.csdn.net/u011127019/article/details/51226104 1.qrcode其实是通过使用jQuery实现图形渲染,画图,支持can ... 
- jquery.qrcode.js生成二维码(前端生成二维码)
		官网地址:http://jeromeetienne.github.io/jquery-qrcode/ 第一步引入插件: <script type='text/javascript' src='h ... 
- jquery.qrcode.js  生成二维码并支持中文的方法
		GitHub地址: https://github.com/jeromeetienne/jquery-qrcode <div class="QR"></div> ... 
- jquery.qrcode.js生成二维码
		<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ... 
- h5开发app之在线生成二维码
		h5通过jquery和qrcode在线生成二维码 首先我们需要下载一个qrcode.js文件,然后依次引入jquery和qrcode文件. 1.创建一个输入框以便做演示使用: <input id ... 
- jquery-qrcode在线生成二维码
		通过bower进行获取: y@y:ydkt$ bower install jquery-qrcode --save bower not-cached git://github.com/gcusnieu ... 
- 利用QrCode.Net生成二维码 asp.net mvc c#
		利用QrCode.Net生成二维码 asp.net mvc c# 里面介绍了.net的方式及js的方式,还不错. 里面用到的qrcode.net的类库下载地址:https://qrcodenet.co ... 
- QRCode.js生成二维码
		QRCode的GitHub地址: https://github.com/KeeeX/qrcodejs 该版本解决了主版本(https://github.com/davidshimjs/qrcodejs ... 
- qrcode.js生成二维码因字符串过长而报错
		前端使用qrcode.js生成二维码的时候.有时候是会出现 qrcode length overflow (1632>1056) 目前使用的有效的解决办法是重新下载新版的qrcode.js 下载 ... 
随机推荐
- Valid Number
			Validate if a given string is numeric. Some examples:"0" => true" 0.1 " => ... 
- Sparse Matrix Multiplication
			Given two sparse matrices A and B, return the result of AB. You may assume that A's column number is ... 
- JS中的timestamp
			http://blog.163.com/lijy_980720@126/blog/static/75574626201261783343834/ 
- sizeof进行结构体大小的判断
			typedef struct{ int a; char b;}A_t;typedef struct{ int a; char b; char c;}B_t;typedef ... 
- Unity3d 防止内存修改工具的小方法
			一个非常简单的方法,直接上代码. private int curATK; private int curAtkKey; public int CurATK { get { return curATK ... 
- cxGrid的使用方法
			来源 http://www.cnblogs.com/djcsch2001/archive/2010/07/19/1780573.html 1. 去掉GroupBy栏 cxGrid1DBTable ... 
- [转]Android 学习资料分享(2015 版)
			转 Android 学习资料分享(2015 版) 原文地址:http://www.jianshu.com/p/874ff12a4c01 目录[-] 我是如何自学Android,资料分享(2015 版) ... 
- Match:Censored!(AC自动机+DP+高精度)(POJ 1625)
			Censored! 题目大意:给定一些字符,将这些字符组成一个固定长度的字符串,但是字符串不能包含一些禁词,问你有多少种组合方式. 这是一道好题,既然出现了“一些”禁词,那么这题肯定和AC自动机有点 ... 
- 调用c++接口类
			调用c++接口类 public class CarDeviceDll { /*对dll库进行一些初始化*/ [DllImport("IDI.dll")] public static ... 
- .NET后台如何获取前台HMTL控件的值
			很多时候我们需要HTML控件,感觉比服务器控件更加简介,清爽,那么如何获取HMTL控件的值呢,请看下面例子: 前台页面代码: <input id="Text1" type=& ... 
