現現在圍繞微信生態相關開發已經很是常見,本期帶來如何經過
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