现现在围绕微信生态相关开发已经很是常见,本期带来如何经过
qrcode.js
实现微信内置浏览器动态生成二维码并可以长按识别 以及 经过html2canvas
生成图片并长按保存css
img
标签img
标签canvas.toDataURL([type, encoderOptions])
type
: 指定图片类型,默认值 image/png
encoderOptions
: 为 image/jpeg
或 image/webp
类型的图片设置图片质量,取值0-1,超出则以默认值0.92替代本例的技术实现方案均在Vue项目环境下实现的html
提供两种引入方式,两种方式是不一样的js库,方便你们选择和使用前端
qrcode.js
// qrcode.js官方GitHub文档: https://github.com/davidshimjs/qrcodejs <script src="static/js/qrcode.js"></script>
qrcodejs2
npm install qrcodejs2 import qrCode from 'qrcodejs2'
HTMLvue
<div class="qrcode-panel" id="qrcode"></div>
JSnode
new QRCode(document.getElementById('qrcode'), 'your content'); // new QRCode(element, option) // element 显示二维码的元素或该元素的 ID // option 参数配置
var qrcode = new QRCode(document.getElementById("qrcode"), { text: "https://www.xxx.com?did=123456&id=123&userid=456", width: 160, //图像宽度 height: 160, // 图像高度 render: 'canvas', // 生成格式(table 和 canvas) colorDark : "#000000", //前景色 colorLight : "#ffffff", //背景色 correctLevel : QRCode.CorrectLevel.H // 容错级别 }); // 容错级别,可设置为: QRCode.CorrectLevel.L(最大 7% 的错误可以被纠正) QRCode.CorrectLevel.M(最大 15% 的错误可以被纠正) QRCode.CorrectLevel.Q(最大 25% 的错误可以被纠正) QRCode.CorrectLevel.H(最大 30% 的错误可以被纠正)
QRCode.makeCode(text) // 设置二维码内容 QRCode.clear() // 清除二维码
重置的缘由是原JS生成的 image 和 canvas 对象没法在微信端长按识别ios
var canvas = document.getElementsByTagName('canvas')[0]; var img = this.convertCanvasToImage(canvas); document.getElementById("qrcode").append(img); convertCanvasToImage(canvas) { //新建Image对象 var image = new Image(); // canvas.toDataURL 返回的是一串Base64编码的URL image.src = canvas.toDataURL("image/png"); image.id = 'qrcodeImg'; return image; }
qrcode.js
生成的二维码长按没法识别,而通过重置以后的对象是能够实现此功能的。append
的方式插入到dom节点中,在关闭操做时须要将以前生成的 canvas
和 image
去除canvas.toDataURL
绘制时的类型使用 image/jpeg
进行保存html2canvas
进行处理html2canvas
不是基于真正的屏幕截图去识别处理,因此脱离了文档流,或者文档流异常的元素会没法被截取下来html2canvas
只会截取到目标元素宽高范围内的内容useCORS
: 是否尝试使用CORS从服务器加载图像async
: 是否异步解析和呈现元素scale
: 用于渲染的比例。默认为浏览器设备像素比率window.devicePixelRatio
allowTaint
: 是否容许画布被污染,被污染的canvas是无法使用toDataURL()转base64流的,部分细节请 参考这里html2canvas
参数请点击这里html2canvas
import html2canvas from 'html2canvas'
<div class="html2canvas-conetent" ref="canvasContent"> <img src="/static/images/canvas.jpg"> <span>测试Title</span> </div> <button @click="showCanvas()">生成canvas图片</button>
html2canvas
推荐的promise方法showCanvas() { let self = this; html2canvas(self.$refs.canvasContent).then(function(canvas) { self.imgUrl = canvas.toDataURL(); self.showCanvasImg = true; }); } // 异步解析调用和呈现元素 showCanvas() { let self = this; html2canvas(self.$refs.canvasContent { async: true }).then(canvas => { self.imgUrl = canvas.toDataURL(); self.showCanvasImg = true; }); }
[万字长文]百度和好将来面试经含答案github
记一次惨痛的Vue-cli + VueX + SSR经历面试