uni-app海报(合成图片)demo

<template>
	<view class='page'>
		<input type="text" value="" class="input" v-model="text" placeholder="请输入需要添加的文字" maxlength="5" />
		<button type="primary" @click='copyFn'>生成图片</button>
		<canvas canvas-id="myCanvas" id='sss'></canvas>
		<image :src="base64" mode="" v-if="base64" class='immm'></image>
		<button type="primary" @click='bcFn' v-if="base64" >保存图片</button>
	</view>
</template>
<script>
	export default {
		data() {
			return {
				text: '',
				base64:null
			}
		},
		methods: {
			copyFn() {
				let ww, hh;
				const query = uni.createSelectorQuery().in(this);
				query.select('#sss').boundingClientRect(data => {  //获取canvas-dom
					ww = data.width; //准确的宽高
					hh = data.height
					var ctx = uni.createCanvasContext('myCanvas') //绑定画布
					ctx.drawImage('../../static/132.png', 0, 0, ww, hh); //填充进图片
					ctx.setFillStyle('#000')  //设置内容1的文字样式
					ctx.setFontSize(30);
					ctx.setTextAlign('center')  //设置对于坐标点的对齐方式
					ctx.fillText(this.text,ww/2,hh/2+55) //计算距离,将文字定位于图片的某处
					ctx.setFillStyle('red')  //设置内容2的文字样式
					ctx.setFontSize(20);
					ctx.setTextAlign('center')  //同上
					ctx.fillText('我就试试',ww/2,hh/2+80)
					ctx.draw();  //输出到画布中
					uni.showLoading({ //增加loading等待效果
						mask:true
					})
					setTimeout(()=>{  //不加延迟的话,base64有时候会赋予undefined
						uni.canvasToTempFilePath({
							canvasId:'myCanvas',
							success: (res) => {
								this.base64=res.tempFilePath
							}
						})
						uni.hideLoading();
					},1200)
				}).exec();

			},
			bcFn(){
				uni.saveImageToPhotosAlbum({  //保存图片
					filePath:this.base64,  
					success: (res) => {
						uni.showToast({
							title:'保存成功',
						})
					}
				})
			}
		}
	}
</script>
.input {
	width: 100%;
	height: 80rpx;
	background: #ccc;
}

#sss {
	position: absolute;
	width: 750rpx;
	height: 426rpx;
	top: -99999899rpx;
	left: -99999899rpx;
	z-index: 9999;
}
.immm {
	width: 750rpx;
	height: 426rpx;
}

 

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值