安装依赖
npm i qrcodejs2 npm i html2canvas
完整范例代码
<template> <div style="padding: 20px"> <!-- 海报html元素 --> <div id="posterHtml" class="posterBox" :style="{backgroundImage: 'url(' + bgImgURL + ')' }"> <div class="posterContent"> {{contentData}} </div> <!-- 二维码 --> <div class="qrcodeBox"> <div id="qrcodeImg"></div> </div> </div> <div> <button class="myButton" @click="createPoster">生成海报</button> <button class="myButton" @click="downloadPoster(posterImgURL,'海报名称')">下载海报</button> </div> <!--微信里,可长按保存或转发--> <img v-if="posterImgURL" class="posterBox" :src="posterImgURL" > </div> </template> <script> import bgImgURL from "@/assets/images/bg2.jpg" import QRCode from 'qrcodejs2' import html2canvas from 'html2canvas' export default { data() { return { bgImgURL: bgImgURL, contentData: '我是一张分享海报', // 文案内容 posterImgURL: '', // 最终生成的海报图片URL } }, mounted() { this.$nextTick( () => { this.createQrcode("https://www.baidu.com/") } ) }, methods: { // 生成二维码 createQrcode(text) { let qrcodeImgEl = document.getElementById('qrcodeImg') qrcodeImgEl.innerHTML = '' let qrcode = new QRCode(qrcodeImgEl, { width: 100, height: 100, colorDark: '#000000', colorLight: '#ffffff', correctLevel: QRCode.CorrectLevel.H }) qrcode.makeCode(text) }, // 生成海报 createPoster() { let that = this let posterDOM = document.getElementById('posterHtml') html2canvas(posterDOM, { width: posterDOM.offsetWidth, height: posterDOM.offsetHeight, //按比例增加分辨率 scale: window.devicePixelRatio, // 设备像素比 useCORS: true,//(图片跨域相关) allowTaint: true,//允许跨域(图片跨域相关) logging: false, letterRendering: true, }).then(function (canvas) { that.posterImgURL = canvas.toDataURL('image/png') }) }, // 下载海报 downloadPoster(url, fileName) { let a = document.createElement('a') a.download = fileName a.href = url a.dispatchEvent(new MouseEvent('click')) }, } } </script> <style scoped> /*海报*/ .posterBox { position: relative; width: 800px; height: 300px; background-repeat: no-repeat; background-size: cover; } /*海报文案*/ .posterContent { text-align: center; color: white; padding: 10px; } /*二维码*/ .qrcodeBox { position: absolute; bottom: 10px; right: 10px; } /*按钮*/ .myButton { background: none; cursor: pointer; padding: 5px 10px; border-radius: 4px; margin: 10px; } </style>
注意事项
- 若第三方的服务端限制了跨域,则引入的网络图片无法截图
- 若是自己的服务端,则图片要是cdn上的地址,并且允许图片跨域,header头中设置应为
Access-Control-Allow-Origin: *
网页截屏html2canvas的使用
// 生成海报 createPoster() { let that = this let posterDOM = document.getElementById('posterHtml') html2canvas(posterDOM, { width: posterDOM.offsetWidth, height: posterDOM.offsetHeight, //按比例增加分辨率 scale: window.devicePixelRatio, // 设备像素比 useCORS: true,//图片跨域相关 allowTaint: true,//允许跨域(图片跨域相关) logging: false, letterRendering: true, }).then(function (canvas) { that.posterImgURL = canvas.toDataURL('image/png') }) },
参数
生成二维码qrcodejs2的使用
text 为扫码二维码显示的内容(若是网址,则会直接打开网页)
// 生成二维码 createQrcode(text) { let qrcodeDOM = document.getElementById('qrcodeImg') qrcodeDOM.innerHTML = '' let qrcode = new QRCode(qrcodeDOM, { width: 100, height: 100, colorDark: '#000000', colorLight: '#ffffff', correctLevel: QRCode.CorrectLevel.H }) qrcode.makeCode(text) },
参数
名称 | 默认值 | 说明 |
width | 256 | 图像宽度 |
height | 256 | 图像高度 |
typeNumber | 4 | |
colorDark | "#000000" | 前景色 |
colorLight | "#ffffff" | 背景色 |
orrectLevel | QRCode.CorrectLevel.L | 容错级别,可设置为: QRCode.CorrectLevel.L QRCode.CorrectLevel.M QRCode.CorrectLevel.Q QRCode.CorrectLevel.H |
方法
名称 | 说明 |
makeCode(text) | 设置二维码内容 |
clear() | 清除二维码。(仅在不支持 Canvas 的浏览器下有效) |