功能需求:html
總體實現流程:前端
使用的第三方庫:canvas
下面是具體實現步驟:bash
1、設計html元素佈局微信
template部分dom
<template>
<!-- 海報html元素 -->
<div id="posterHtml" :style="{backgroundImage: 'url('+posterHtmlBg+')'}" v-show="false">
<div>{{posterContent}}</div>
<!-- 二維碼 -->
<div class="qrcode"><div id="qrcodeImg"></div></div>
</div>
</template>複製代碼
script部分:佈局
<script>
import QRCode from 'qrcodejs2'
import html2canvas from 'html2canvas'
export default {
data() {
return {
posterContent: '', // 文案內容
posterHtmlBg: require('../../assets/images/poster/invite_poster_bg.jpg'), // 背景圖
posterImg: '', // 最終生成的海報圖片
}
},
}
</script>
複製代碼
2、合成二維碼圖片post
methods: {
createQrcode(text) {
// 生成二維碼
const qrcodeImgEl = document.getElementById('qrcodeImg')
qrcodeImgEl.innerHTML = ''
let qrcode = new QRCode(qrcodeImgEl, {
width: 256,
height: 256,
colorDark: '#000000',
colorLight: '#ffffff',
correctLevel: QRCode.CorrectLevel.H
})
qrcode.makeCode(text)
},
}
複製代碼
3、將html元素轉換成海報圖片網站
methods: {
createPoster() {
// 生成海報
const vm = this
const domObj = document.getElementById('posterHtml')
html2canvas(domObj, {
useCORS: true,
allowTaint: false,
logging: false,
letterRendering: true,
onclone(doc) {
let e = doc.querySelector('#posterHtml')
e.style.display = 'block'
}
}).then(function(canvas) {
// 在微信裏,可長按保存或轉發
vm.posterImg = canvas.toDataURL('image/png')
})
},
}
複製代碼
注意: 添加html2canvas對象的onclone方法是爲了 生成一個複製的虛擬組件,設置爲顯示,便可獲取進行繪製,且虛擬組件不會顯示在頁面上.ui
福利: 本文已同步到個人我的技術網站 IT乾貨-sufaith 該網站包括Python, Linux, Nodejs, 前端開發等模塊, 專一於程序開發中的技術、經驗總結與分享, 歡迎訪問.