jquery插件qrcode在线生成二维码


Posted in Javascript onApril 26, 2015

随着移动互联网的发展,二维码现在应用得越来越广泛了,随手扫扫就可以浏览网站、加个好友什么的,比起手工输入真的是方便太多了。

前期做了一个综合测评系统,考虑逐步实现移动化,一长串的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>

<div id="qrcodeCanvas"></div>

<div id="qrcodeTable"></div>
<script>
 //最简用法,render默认是canvas
 $('#qrcodeCanvas').qrcode("https://3water.com/");
 //完整用法,有默认值的均可省略
 $('#qrcodeTable').qrcode({
  text: utf16to8("三水点靠木:https://3water.com/"),//二维码包含的内容,默认只支持英文内容,中文会乱码,通过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>

基于官方示例测试,我们会发现识别出来的中文二维码会是乱码。

根据网友心存善念的解释:

这跟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;
}

以上就是今天给大家分享的全部内容了,希望能够对大家学习jQuery有所帮助。

Javascript 相关文章推荐
jquery 图片上传按比例预览插件集合
May 28 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
Jan 15 Javascript
javascript初学者常用技巧
Sep 02 Javascript
DOM基础教程之事件类型
Jan 20 Javascript
JS使用正则表达式验证身份证号码
Jun 23 Javascript
Vue仿支付宝支付功能
May 25 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
Sep 05 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
Jun 25 Javascript
转换layUI的数据表格中的日期格式方法
Sep 19 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
Sep 20 Javascript
小程序开发之模态框组件封装
Apr 23 Javascript
vue keep-alive的简单总结
Jan 25 Vue.js
javascript函数式编程实例分析
Apr 25 #Javascript
javascript中eval函数用法分析
Apr 25 #Javascript
javascript属性访问表达式用法分析
Apr 25 #Javascript
javascript变量声明实例分析
Apr 25 #Javascript
javascript显式类型转换实例分析
Apr 25 #Javascript
javascript原始值和对象引用实例分析
Apr 25 #Javascript
JavaScript分页功能的实现方法
Apr 25 #Javascript
You might like
星际玩家的三大定律
2020/03/04 星际争霸
不要轻信 PHP_SELF的安全问题
2009/09/05 PHP
form自动提交实例讲解
2017/07/10 PHP
javascript &amp;&amp;和||运算法的另类使用技巧
2009/11/28 Javascript
js 多浏览器分别判断代码
2010/04/01 Javascript
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
javascript代码编写需要注意的7个小细节小结
2011/09/21 Javascript
js监听键盘事件示例代码
2013/07/26 Javascript
理解Javascript闭包
2013/11/01 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
webpack进阶——缓存与独立打包的用法
2017/08/02 Javascript
微信小程序button组件使用详解
2018/01/31 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
解决layui的radio属性或别的属性没显示出来的问题
2019/09/26 Javascript
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
探究Python中isalnum()方法的使用
2015/05/18 Python
Python自定义线程类简单示例
2018/03/23 Python
python多进程实现文件下载传输功能
2018/07/28 Python
运动鞋、足球鞋和慕尼黑球衣:Sport Münzinger
2019/08/26 全球购物
开工庆典邀请函范文
2014/01/16 职场文书
小学毕业感言50字
2014/02/16 职场文书
卖车协议书
2014/04/21 职场文书
幼儿园健康教育方案
2014/06/14 职场文书
学习雷锋标语
2014/06/25 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
中班上学期个人总结
2015/02/12 职场文书
2015年汽车销售经理工作总结
2015/04/27 职场文书
防溺水主题班会教案
2015/08/12 职场文书
《花钟》教学反思
2016/02/17 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS
Python移位密码、仿射变换解密实例代码
2021/06/27 Python
MySQL实现配置主从复制项目实践
2022/03/31 MySQL