+
95
-

uniapp如何生成自定义文字和图片的海报?

uni

uniapp如何生成自定义文字和图片的海报?


网友回复

+
15
-

效果:

800_auto

完整uniapp代码,兼容app、h5、小程序

<template>
	<view>
		<!-- 生成海报的点击事件 -->
		<view @click="generatePoster">点击分享</view>

		<!-- 生成海报的canvas -->
		<view class="my-canvas-box" @touchmove.stop.prevent v-show="show" @click="show = false">
			<canvas class="my-canvas" canvas-id="myCanvas" @longpress.stop="saveSharePic"></canvas>
			<view class="canvas-tip">长按可保存海报</view>
		</view>

	</view>
</template>

<script>
	export default {
		data() {
			return {
				show: false,
			}
		},
		methods: {
			// 生成海报
			generatePoster() {
				// 这里是创建 canvas 绘图上下文
				let context = uni.createCanvasContext('myCanvas');

				// 这里可以根据自己的需求显示加载动画
				uni.showToast({
					title: '正在生成海报,请稍后',
					icon: 'none',
					duration: 3000
				});
				// 小程序码图片,下面可以放一个请求,来保存小程序码。然后赋值到qrImg这个变量上面
				let qrImg = 'http://repo.bfw.wiki/bfwrepo/image/5f9e27c437f2a.png';

				// 给整个canvas填充白色背景(这个如果不加上的话,在APP端生成的海报没有白色背景)
				context.setFillStyle('#ffffff');
				context.fillRect(0, 0, 500, 900);
				context.draw();
				// 绘制用户昵称
				context.setFontSize(14);
				context.setFillStyle('#000000');
				// 这里根据自己的项目填写用户昵称的字段
				context.fillText('用户的昵称', 100, 48);
				context.setFontSize(12);
				context.setFillStyle('#999999');
				context.fillText('的分享', 100, 68);
				// 绘制价格
				context.setFontSize(18);
				context.setFillStyle('red');
				context.fillText(`¥199`, 20, 366);
				// 绘制商品名称,这里是调用一个方法,按字符串长度进行分割换行。【可以做一个优化】
				this.drawText("商品名称", 20, 379, context);
				// 绘制头像
				uni.d...

点击查看剩余70%

我知道答案,我要回答