注意:本示例依托于vue2
<template>
<div>
<div class="main-con">
<div class="ercode" ref="imageWrapper">
<div class="ercode-t">
<div class="ercode-title">图片名字</div>
</div>
<img class="ercode-img" :src="图片地址" />
</div>
</div>
<p slot="footer" class="dialog-footer">
<button size="mini" @click="onExport">下载二维码</button>
</p>
<div>
</template>
<script>
export default {
methods:{
onExport() {
const clientWidth = this.$refs.imageWrapper.offsetWidth
const clientHeight = this.$refs.imageWrapper.offsetHeight
const kh = [clientWidth, clientHeight]
html2canvas(this.$refs.imageWrapper, {
useCORS: true,
logging: true
}).then(canvas => {
const dataURL = canvas.toDataURL('image/png')
this.download(dataURL, kh)
})
},
getUrlBase64(url, kh) {
return new Promise(resolve => {
let canvas = document.createElement('canvas')
const ctx = canvas.getContext('2d')
const img = new Image()
img.crossOrigin = 'Anonymous' // 允许跨域
img.src = url
img.onload = () => {
// eslint-disable-next-line prefer-destructuring
canvas.height = kh[1]
canvas.width = kh[0]
ctx.drawImage(img, 0, 0, kh[0], kh[1])
const dataURL = canvas.toDataURL('image/png')
canvas = null
resolve(dataURL)
}
})
},
download(imgUrl, kh) {
this.getUrlBase64(imgUrl, kh).then(base64 => {
const link = document.createElement('a')
link.href = base64
link.download = `${this.data.name}.png`
link.click()
})
}, // 点击下载当前截图
}
}
</script>