uniapp微信小程序使用canvas自定义分享名片

在这里插入图片描述

template

<view class="hideCanvasView">
	<canvas class="shareCanvas" canvas-id="shareCanvas" style="width: 452px; height: 362px;"></canvas>
</view>

js
需要分享的页面加上onShareAppMessage,在methods中定义绘画方法createCanvasImage

methods:{
	createCanvasImage(avatar) {
		let self = this;
		//下载获取头像
		let headImg = new Promise(function(resolve) {
			wx.downloadFile({
			    url: avatar,
			    success: function (res) {
			      //返回零时地址
				  resolve(res.tempFilePath);
			    }
			}) 
		});
		Promise.all([headImg]).then(function(result) {
		console.log("开始绘制分享背景图",result)
		setTimeout(() => {
			const ctx = uni.createCanvasContext('shareCanvas');
			//清空画布
			ctx.clearRect(0, 0, 452, 362);
			//背景图片
			ctx.drawImage('../../static/share_bg.png', 0, 0, 452, 362);
			//头像的白色边框
			ctx.arc(68, 70, 44, 0, 2 * Math.PI);
			ctx.setFillStyle('#ffffff');
			ctx.fill();
			//头像
			ctx.save()
			ctx.beginPath()
			ctx.arc(68, 70, 40, 0, 2 * Math.PI)
			ctx.clip()
			ctx.drawImage(result[0], 30, 32, 80, 80)
			ctx.restore()
			//名称
			ctx.setFillStyle('#ffffff'); // 文字颜色
			ctx.setFontSize(34); // 文字字号
			ctx.fillText(self.CustomerDetail.name, 124, 64); // 绘制文字
			//班级
			ctx.setFillStyle('#ffffff'); // 文字颜色
			ctx.setFontSize(20); // 文字字号
			ctx.fillText('MBA班级:'+self.CustomerDetail.className, 124, 100); // 绘制文字
			//公司图标
			ctx.drawImage('../../static/gs.png', 28, 136, 24, 24);
			//公司名称
			ctx.setFillStyle('#ffffff'); // 文字颜色
			ctx.setFontSize(20); // 文字字号
			ctx.fillText(self.CustomerDetail.company , 64, 154); // 绘制文字
			//职位图标
			ctx.drawImage('../../static/zw.png', 28, 174, 24, 24);
			//职位名称
			ctx.setFillStyle('#ffffff'); // 文字颜色
			ctx.setFontSize(20); // 文字字号
			ctx.fillText(self.CustomerDetail.position, 64, 192); // 绘制文字
			//地址图标
			ctx.drawImage('../../static/dz.png', 28, 212, 24, 24);
			//地址名称
			ctx.setFillStyle('#ffffff'); // 文字颜色
			ctx.setFontSize(20); // 文字字号
			
			let address=self.region[0][self.regionindex[0]].label?self.region[0][self.regionindex[0]].label:''+'-'
			+self.region[1][self.regionindex[1]].label?self.region[1][self.regionindex[1]].label:''+'-'
			+self.region[2][self.regionindex[2]].label?self.region[2][self.regionindex[2]].label:'';
			ctx.fillText(address, 64, 230); // 绘制文字
			//绘制虚线
			ctx.setLineDash([2, 4], 1);
			ctx.beginPath();
			ctx.moveTo(12, 264);
			ctx.lineTo(440, 264);
			ctx.setStrokeStyle('#ffffff')
			ctx.stroke();
			//绘制底部按钮
			let x = 126,
				y = 286,
				w = 194,
				h = 56,
				r = 30;
			if (w < 2 * r) r = w / 2;
			if (h < 2 * r) r = h / 2;
			ctx.beginPath();
			ctx.moveTo(x + r, y);
			ctx.arcTo(x + w, y, x + w, y + h, r);
			ctx.arcTo(x + w, y + h, x, y + h, r);
			ctx.arcTo(x, y + h, x, y, r);
			ctx.arcTo(x, y, x + w, y, r);
			ctx.closePath();
			//按钮渐变色
			const grd = ctx.createLinearGradient(x, y, x + w, y)
			grd.addColorStop(0, '#FFFFFF')
			grd.addColorStop(1, '#F0ECFF')
			ctx.setFillStyle(grd)
			ctx.fill()
		
			//绘制按钮文字
			ctx.setFillStyle('#7657ef'); // 文字颜色
			ctx.setFontSize(22); // 文字字号
			ctx.fillText('浏览个人资料', 158, 324); // 绘制文字
		
			ctx.draw(false, ((ret) => {
				// canvas画布转成图片并返回图片地址
				wx.canvasToTempFilePath({
					canvasId: 'shareCanvas',
					success: function(res) {
						self.canvasToTempFilePath = res.tempFilePath;
						console.log('绘制成功-------------', res.tempFilePath);
					},
					fail: function(error) {
						console.log('绘制失败-------------', error);
					},
					complete: function() {
					}
				});
			}));
		}, 1000)});
	},
},
onShareAppMessage(res) {
	if (res.from === 'button') { // 来自页面内分享按钮
		console.log('分享', res.target)
	}
	//当canvas还未渲染完成时等待完成
	if(!this.canvasToTempFilePath){
		console.log("未渲染完成")
		setTimeout(() => {},1000)
	}
	return {
		title: '我是'+this.CustomerDetail.company+'的'+this.CustomerDetail.name,
		imageUrl: this.canvasToTempFilePath,
		path: '/pages/memberManage/memberInfo?customerId=' + this.customerId
	}
}

css这里是画布的内容设置

.hideCanvasView{
	position: relative;
}
.shareCanvas {
	position: fixed;
	top: -99999upx;
	left: -99999upx;
	z-index: -99999;
}
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Uniapp中,实现微信小程序分享图片的流程如下: 1. 首先,使用canvas绘图功能将图片绘制到页面上,并生成一个本地路径。 2. 接下来,将绘制好的图片保存至本地。 3. 最后,由用户自行选择将保存的图片分享给朋友或者朋友圈。 除了以上方法,还可以使用mixins文件夹下的share.js文件来定义全局分享内容。在该文件中,可以设置分享的标题、路径、图片链接和描述。然后,通过onShareAppMessage方法实现发送给朋友的分享,通过onShareTimeline方法实现分享到朋友圈的分享。 总结起来,Uniapp微信小程序分享图片的流程包括使用canvas绘图生成本地路径、保存图片至本地、由用户自行分享图片,以及使用全局分享设置进行自定义分享。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [uniapp小程序分享图片](https://blog.csdn.net/m0_49744220/article/details/125769297)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [uniapp 实现微信小程序分享给好友、朋友圈](https://blog.csdn.net/weixin_38982591/article/details/125096377)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值