qrcode.js使用js生成二维码(并下载)的实践

来源:互联网 发布:apache官方下载32位 编辑:程序博客网 时间:2024/06/07 05:29

知识点

  • base64数据形式

    Base64是一种用64个字符来表示任意二进制数据的方法。 – 廖雪峰官方网站

    Base64编码有哪些情景需求? – 知乎

案例场景

  • 后台生成邀请链接,前端拿到链接之后处理成二维码图片并下载到本地,用于转发。

qrcode.js及jquery-qrcode.js实现生成二维码

  • qrcode.js github地址: qrcode
  • jquery-qrcode.js github地址: jquery-qrcode

1.html 代码

  <div id="qrcode"></div>  <!-- 用于生成二维码的容器 -->

2.js 代码

  // qrcode.js  var qrcode = new QRCode(document.getElementById("qrcode"), {    text: "i am the first qrcode",    width: 128, //生成的二维码的宽度    height: 128, //生成的二维码的高度    colorDark : "#000000", // 生成的二维码的深色部分    colorLight : "#ffffff", //生成二维码的浅色部分    correctLevel : QRCode.CorrectLevel.H  });  //jquery-qrcode.js  var qrcode = $('#qrcode').qrcode({    width: 128,    height: 128,    text: "size doesn't matter"  });

3.qrcode.js 与jquery-qrcode.js区别

  • qrcode.js可以指定生成的二维码深色、浅色区域块的颜色,jquery-qrcode.js只能默认黑白两色
  • qrcode.js支持clear()和makeCode()方法,用于便捷清空二维码、更换二维码,jquery-qrcode.js不支持

4.qrcode.js生成二维码原理

示意图

  • qrcode.js在用于生成二维码的容器#qrcode内生成一个canvas标签和一个img标签,并且以base64的编码格式描述图片信息。

点击按钮,生成的二维码图片保存到本地

实现原理

  • 将base64编码格式的图片转换成canvas画布
  • 利用toDataUrl()方法将canvas画布信息转化为可供下载的url信息 toDataUrl()
  • 构建下载链接并模拟点击,将图片下载到本机

基于qrcode.js案例demo实现将生成的二维码保存为本地图片

  • 构建一个用于下载的空的a标签
  <a id="downloadLink"></a>  <button type="button" onclick="downloadClick()">下载</button>
  • 将base64图片构建成画布并模拟点击a标签下载
  //js  function downloadClick () {    // 获取base64的图片节点    var img = document.getElementById('qrcode').getElementsByTagName('img')[0];    // 构建画布    var canvas = document.createElement('canvas');    canvas.width = img.width;    canvas.height = img.height;    canvas.getContext('2d').drawImage(img, 0, 0);    // 构造url    url = canvas.toDataURL('image/png');    // 构造a标签并模拟点击    var downloadLink = document.getElementById('downloadLink');    downloadLink.setAttribute('href', url);    downloadLink.setAttribute('download', '二维码.png');    downloadLink.click();  }  //jquery  function downloadClick () {    // 获取base64的图片节点    var img = $('#qrcode img').[0];    // 构建画布    var canvas = document.createElement('canvas');    canvas.width = img.width;    canvas.height = img.height;    canvas.getContext('2d').drawImage(img, 0, 0);    // 构造url    url = canvas.toDataURL('image/png');    // 构造a标签并模拟点击    var downloadLink = $('#downloadLink').attr("href", url).attr("download", "二维码.png");    downloadLink[0].click();  }
原创粉丝点击