vue页面下载成截图图片

16 篇文章 0 订阅

首先 先安装 html2canvas

npm install --save html2canvas

然后下面是完整代码

<template>
	<div>
		<div ref="imageWrapper">
			<div>
				<img src="图片路径" />
				<p>文字</p>
			</div>
		</div>
		<div>
			<button @click="toImage">生成截图</button>
		</div>
	</div>
</template>
<script>
import html2canvas from 'html2canvas'
export default {
	data() {
		return {imgUrl: ''}
	},
	created: function() {},
	methods: {
		toImage() {
			html2canvas(this.$refs.imageWrapper).then((canvas) => {
				let dataURL = canvas.toDataURL('image/png')
				this.imgUrl = dataURL
				var a = document.createElement('a') // 生成一个a元素
				var event = new MouseEvent('click') // 创建一个单击事件
				a.download = name || 'photo' // 设置图片名称
				a.href = dataURL // 将生成的URL设置为a.href属性
				a.dispatchEvent(event) // 触发a的单击事件
			})
		},
	},
}
</script>
<style lang="scss" scoped></style>

 还有其他的下载方法,不过跟上面的差不多,也可以写上,都能下载图片

<template>
	<div>
		<div ref="imageWrapper">
			<div>
				<img src="图片地址" />
				<p>支付文字</p>
			</div>
		</div>
		<div>
			<button @click="toImage">生成截图</button>
		</div>
	</div>
</template>
<script>
import html2canvas from 'html2canvas'
export default {
	data() {
		return {imgUrl: ''}
	},
	created: function() {},
	methods: {
		toImage() {
			html2canvas(this.$refs.imageWrapper).then((canvas) => {
				let dataURL = canvas.toDataURL('image/png')
				this.imgUrl = dataURL
				if (this.imgUrl !== '') {
					// this.download(this.imgUrl)  // 方法一
					this.downloadImage(this.imgUrl)  // 方法二(移动端也可以下载;ps:微信浏览器不能下载)
				}
			})
		},
		download(imgUrl) {
			let imgData = imgUrl //这里放需要下载的base64
			this.downloadFile('测试.png', imgData)
		},
		//下载
		downloadFile(fileName, content) {
			let aLink = document.createElement('a')
			let blob = this.base64ToBlob(content) //new Blob([content]);

			let evt = document.createEvent('HTMLEvents')
			evt.initEvent('click', true, true) //initEvent 不加后两个参数在FF下会报错  事件类型,是否冒泡,是否阻止浏览器的默认行为
			aLink.download = fileName
			aLink.href = URL.createObjectURL(blob)

			// aLink.dispatchEvent(evt);
			aLink.click()
		},
		//base64转blob
		downloadImage(base64Url) {
			let imgUrl = base64Url
			if (window.navigator.msSaveOrOpenBlob) {
				//兼容IE浏览器的写法
				let imageStr = atob(imgUrl.split(',')[1])
				let n = imageStr.length
				let u8arr = new Uint8Array(n)
				while (n--) {
					u8arr[n] = imageStr.charCodeAt(n)
				}
				let blob = new Blob([u8arr])
				window.navigator.msSaveOrOpenBlob(
					blob,
					'chart-download' + '.' + 'png'
				)
			} else {
				//非IE浏览器
				let a = document.createElement('a')
				a.href = imgUrl
				a.setAttribute('download', 'chart-download')
				a.click()
			}
		},
	},
}
</script>
<style lang="scss" scoped></style>

如果有其他更好方法欢迎留言!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值