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 相关文章推荐
xss文件页面内容读取(解决)
Nov 28 Javascript
js对象的构造和继承实现代码
Dec 05 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
Dec 14 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
May 17 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
Jun 25 Javascript
node.js + socket.io 实现点对点随机匹配聊天
Jun 30 Javascript
JS实现左边列表移到到右边列表功能
Mar 28 Javascript
React Router V4使用指南(精讲)
Sep 17 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
Sep 26 Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
May 07 Javascript
vue3.0实现点击切换验证码(组件)及校验
Nov 18 Vue.js
前端vue+express实现文件的上传下载示例
Feb 18 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
必须收藏的php实用代码片段
2016/02/02 PHP
PHP实现文件上传与下载
2020/08/28 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
JavaScript中使用正则匹配多条,且获取每条中的分组数据
2010/11/30 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
2016/04/14 Javascript
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
详解javascript中的Error对象
2019/04/25 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
node.js实现带进度条的多文件上传
2020/03/27 Javascript
[31:55]完美世界DOTA2联赛循环赛 IO vs GXR BO2第一场 11.04
2020/11/05 DOTA
[51:39]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第二场 2月7日
2021/03/11 DOTA
详解Python的Django框架中的中间件
2015/07/24 Python
python 调用HBase的简单实例
2016/12/18 Python
Python yield 使用方法浅析
2017/05/20 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
详解python中的time和datetime的常用方法
2019/07/08 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
Python 图像对比度增强的几种方法(小结)
2019/09/25 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
Aveda美国官网:天然护发产品、洗发水、护发素和沙龙
2016/12/09 全球购物
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
小蚁科技官方商店:YI Technology
2019/08/23 全球购物
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
初中学习计划书范文
2014/09/15 职场文书
亚布力滑雪场导游词
2015/02/09 职场文书
员工自我评价范文
2015/03/11 职场文书
新闻通讯稿模板
2015/07/22 职场文书
【海涛dota解说】海涛小满开黑4v5被破两路翻盘潮汐第一视角解说
2022/04/01 DOTA