uni-app 使用html2canvas生成海报,一步到位

ps: 如果图片存在跨域问题,请现在后台配置解决图片跨域问题;
app不能操作dom,所以app使用renderJS处理 示例在最后

步骤分为三步
1、安装html2canvas

npm i html2canvas

2、引入html2canvas

import html2canvas from 'html2canvas'

3、上代码

<view id="poster" >
<!-- 这里边是你需要保存的页面样式,需要什么样式就写什么样的就行,都放在这里边 -->
			<image src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1607954723508&di=bd82faed41462479550f7b15e3ac91ba&imgtype=0&src=http%3A%2F%2Fa0.att.hudong.com%2F52%2F62%2F31300542679117141195629117826.jpg" mode=""></image>
</view>


// js
var dom = document.querySelector('#poster'); // 获取dom元素
				html2canvas(dom, {
					width: dom.clientWidth, //dom 原始宽度
					height: dom.clientHeight,
					scrollY: 0, // html2canvas默认绘制视图内的页面,需要把scrollY,scrollX设置为0
					scrollX: 0,
					useCORS: true, //支持跨域,但好像没什么用
				}).then((canvas) => {
					// 将生产的canvas转为base64图片
					this.base64 = canvas.toDataURL('image/png')
				});

完整代码

<template>
	<view>
		<view class="pick poster" id="poster" style="background: #007AFF;">
			<!-- 这里边是你需要保存的页面样式,需要什么样式就写什么样的就行,都放在这里边 -->
			<view class="">
				文字
			</view>
			<image src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1607954723508&di=bd82faed41462479550f7b15e3ac91ba&imgtype=0&src=http%3A%2F%2Fa0.att.hudong.com%2F52%2F62%2F31300542679117141195629117826.jpg" mode=""></image>
		</view>
		<image :src="base64" mode=""></image>
		<button type="default" @click="toImg">生成海报</button>
	</view>
</template>

<script>
	import html2canvas from 'html2canvas';
	export default {
		data() {
			return {
				base64: ''
			}
		},
		onLoad() {},
		methods: {
			toImg() {
				// 使页面滑到顶部,避免顶部出现白边
				uni.pageScrollTo({
					scrollTop: 0,
					duration: 0
				})
				var dom = document.querySelector('#poster'); // 获取dom元素
				html2canvas(dom, {
					width: dom.clientWidth, //dom 原始宽度
					height: dom.clientHeight,
					scrollY: 0, // html2canvas默认绘制视图内的页面,需要把scrollY,scrollX设置为0
					scrollX: 0,
					useCORS: true, //支持跨域,但好像没什么用
				}).then((canvas) => {
					// 将生产的canvas转为base64图片
					this.base64 = canvas.toDataURL('image/png')
				});
			},
		}
	}
</script>

<style>

</style>

效果图
在这里插入图片描述

app示例

<template>
	<view>
		<view :change:msg="renderScript.receiveMsg" class="renderjs" id="poster">
			<view class="">
				文字
			</view>
			<image src="https://yanxincloudplatform.oss-cn-beijing.aliyuncs.com/static/client/thumbs-up/active-top.jpg" mode=""></image>
		</view>
		<button @click="renderScript.emitData">生成海报</button>
		
		<view class="poster-view">
			<image :src="base64" mode=""></image>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				base64: ''
			};
		},
		methods: {
			// 接收renderjs发回的数据
			receiveRenderData(val) {
				this.base64 = val
			}
		}
	};
</script>

<script module="renderScript" lang="renderjs">
	import html2canvas from 'html2canvas';
	export default {
		data() {
			return {

			}
		},
		mounted() {},
		methods: {
			// 发送数据到逻辑层
			emitData(e, ownerVm) {
				const dom = document.getElementById('poster')
				html2canvas(dom, {
					width: dom.clientWidth, //dom 原始宽度
					height: dom.clientHeight,
					scrollY: 0, // html2canvas默认绘制视图内的页面,需要把scrollY,scrollX设置为0
					scrollX: 0,
					useCORS: true, //支持跨域,但好像没什么用
				}).then((canvas) => {
					// 将生产的canvas转为base64图片3
					ownerVm.callMethod('receiveRenderData', canvas.toDataURL('image/png'))
				});

			}
		}
	};
</script>
<style>
	.poster-view{
		background: #007AFF;
		margin-top: 100rpx;
	}
</style>

  • 12
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
uni-app使用html2canvas生成图片并点击保存,你可以按照以下示例代码进行操作: 1. 首先,安装html2canvas依赖: ``` npm install html2canvas --save ``` 2. 在需要使用html2canvas的页面中引入html2canvas库: ```html <template> <view> <!-- 页面内容 --> </view> </template> <script> import html2canvas from 'html2canvas'; export default { methods: { saveImage() { // 获取需要生成图片的DOM元素 const target = document.getElementById('target'); // 使用html2canvas生成图片 html2canvas(target).then(canvas => { // 将canvas转换为图片地址 const imgUrl = canvas.toDataURL('image/png'); // 创建a标签并设置下载属性 const link = document.createElement('a'); link.href = imgUrl; link.download = 'image.png'; // 模拟点击下载 link.click(); }); }, }, }; </script> <style> /* 样式 */ </style> ``` 3. 在需要保存图片的地方调用`saveImage`方法: ```html <template> <view> <!-- 页面内容 --> <button @click="saveImage">保存图片</button> </view> </template> <script> export default { methods: { saveImage() { // 调用保存图片方法 }, }, }; </script> <style> /* 样式 */ </style> ``` 在以上代码中,我们使用`html2canvas`库将指定的DOM元素(id为`target`)生成为一个canvas对象,然后将canvas转换为图片地址,并创建一个带有下载属性的a标签,模拟点击该标签实现下载保存功能。你可以根据自己的需求进行相应的样式和DOM元素的操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值