uni-app 使用html2canvas.js + uqrcode.js将页面内容(包含生成的二维码)合成图片

1. 下载html2canvas
<-- npm -->
npm i html2canvas --save
<-- yarn -->
yarn add html2canvas
2. 下载image-tools
<-- npm -->
npm i image-tools --save
<-- yarn -->
yarn add image-tools
3. 在插件市场下载html2canvas组件

在这里插入图片描述
也可以使用下面代码

<template>
	<view>
		<view class="html2canvas" :prop="domId" :change:prop="html2canvas.create">
			<slot></slot>
		</view>
	</view>
</template>

<script>
	import { base64ToPath } from 'image-tools.js';
	export default {
		name: 'html2canvas',
		props: {
			domId: {
				type: String,
				required: true
			}
		},
		methods: {
			async renderFinish(base64) {
				try{
					const imgPath = await base64ToPath(base64, '.jpeg');
					this.$emit('renderFinish', imgPath);
				}catch(e){
					//TODO handle the exception
					console.log('html2canvas error', e)
				}
			},
			showLoading() {
				uni.showToast({
					title: "正在生成海报",
				 	icon: "none",
				 	mask: true,
				})
			},
			hideLoading() {
				uni.hideToast();
			}
		}
	}
</script>

<script module="html2canvas" lang="renderjs">
import html2canvas from 'html2canvas';
export default {
	methods: {
		async create(domId) {
			try {
				this.$ownerInstance.callMethod('showLoading', true);
				const timeout = setTimeout(async ()=> {
					const shareContent = document.querySelector(domId);
					const canvas = await html2canvas(shareContent,{
						width: shareContent.offsetWidth,//设置canvas尺寸与所截图尺寸相同,防止白边
						height: shareContent.offsetHeight,//防止白边
						logging: true,
						useCORS: true
					});
					const base64 = canvas.toDataURL('image/jpeg', 1);
					this.$ownerInstance.callMethod('renderFinish', base64);
					this.$ownerInstance.callMethod('hideLoading', true);
					clearTimeout(timeout);
				}, 500);
			} catch(error){
				console.log(error)
			}
		}
	}
}
</script>

4. 插件市场uQRCode

二维码生成插件,不需要的刻意忽略
在这里插入图片描述

5. 在文件中使用
<template>
	<view class="page">
		<view class="container">
			<html2canvas ref="html2canvas" :domId="domId" @renderFinish="renderFinish">
				<view class="img" id="image">
					<text>生成图片</text>
					//生成二维码(不需要刻意不要)
					<canvas id="qrcodes" canvas-id="qrcodes" />
				</view>
			</html2canvas>
			<image :src="img"></image>
		</view>
	</view>
</template>

<script>
	import uQRCode from '@/components/uqrcode/common/uqrcode.js'
	import html2canvas from '@/components/html2canvas/html2canvas.vue'
	import { base64ToPath, pathToBase64 } from 'image-tools.js';
	export default{
		components:{
			html2canvas
		},
		data(){
			return{
				img: '',
				domId: ''
			}
		},
		onReady() {
			//生成二维码
			uQRCode.make({
				componentInstance: this,//绑定this指向
				canvasId: 'qrcodes',//画布标识
				size: 40,//二维码尺寸
				backgroundColor: '#ffffff',//背景色
				foregroundColor: '#000',//前景色
				fileType: 'png',//输出图片类型
				errorCorrectLevel: uQRCode.errorCorrectLevel.H,//纠错等级
				text: '123'//二维码内容
			})
			.then(res => {
	            console.log(res)
			})
		},
		onLoad(){
			this.domId = '#image'
		},
		methods:{
			renderFinish(filePath) {
				console.log(filePath)
				this.img = filePath;
			}
		}
	}
</script>

<style lang="scss" scoped>
	uni-canvas{
		width: 80rpx;
		height: 80rpx;
	}
</style>
遇到问题解决

使用oss服务器里的图片报跨域:

  1. 在oss服务器配置所有可访问限制Access-Control-Allow-Origin '*'
    在这里插入图片描述
    如果是接口请求的显示出来的图片,叫后台在图片链接后面加上个后缀,比如时间戳?t=1234567
uni-app生成二维码可以使用第三方库qrcode.js。以下是生成二维码的步骤: 1. 首先,通过npm将qrcode.js安装到你的uni-app项目中。打开命令行工具,切换到你的项目根目录下,执行以下命令: ```shell npm install qrcode.js --save ``` 2. 在需要生成二维码页面中引入qrcode.js。打开你需要使用页面的vue文件,添加以下代码: ```javascript import QRCode from 'qrcodejs2' export default { mounted() { // 在mounted钩子函数中调用生成二维码的方法 this.generateQRCode() }, methods: { generateQRCode() { // 获取二维码容器DOM元素 const qrcodeContainer = this.$refs.qrcodeContainer // 创建一个qrcode实例 const qrcode = new QRCode(qrcodeContainer, { text: 'https://www.csdn.net', // 二维码内容 width: 200, // 二维码的宽度 height: 200 // 二维码的高度 }) // 或者你也可以通过动态数据传递给二维码内容 // const qrcode = new QRCode(qrcodeContainer, { // text: this.dynamicData, // width: 200, // height: 200 // }) // 可以根据需要自定义二维码的样式 qrcodeContainer.children[0].style.margin = '10px' } } } ``` 3. 在页面的模板中添加一个用于渲染二维码的容器。在你的页面模板中,添加以下代码: ```html <template> <view> <canvas ref="qrcodeContainer"></canvas> </view> </template> ``` 这样,当你访问该页面时,就会生成一个指定内容二维码并渲染在页面上。 以上就是在uni-app生成二维码的方法,希望能帮到你!如果有更多问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值