加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

微信小程序通过保存图片分享到朋友圈功能

发布时间:2020-12-14 20:08:20 所属栏目:资源 来源:网络整理
导读:说明 首先说明一点,小程序内是不能直接分享到朋友圈的。所以只能通过生成图片,携带小程序二维码,保存到手机相册,让用户自己选择发到朋友圈。然后可以通过在小程序中识别二维码来进入小程序的指定页面。参考市面上支持分享的应用,基本都是这种实现方式。

说明

首先说明一点,小程序内是不能直接分享到朋友圈的。所以只能通过生成图片,携带小程序二维码,保存到手机相册,让用户自己选择发到朋友圈。然后可以通过在小程序中识别二维码来进入小程序的指定页面。参考市面上支持分享的应用,基本都是这种实现方式。

准备阶段

1.通过服务器获取小程序码

这里可以参考下微信的官方文档,给后台指定的参数和路径等信息,让后台生成指定的小程序码。然后调用wx.getImageInfo将后台生成的小程序码保存起来。

注意一定要仔细看下微信的文档,如果生成小程序码的路径正式服务器不存在,将会生成失败。这点也很蛋疼,很不方便调试。

1.通过canvas绘制所需信息

准备好所有的图片之后就可以通过canvas绘制了,然后再将canvas导出为图片。关于绘制这块,可以参考微信的canvas api,下面的基本都是查着api的方法走的。

其中需要注意的有几点。

1.是不知道绘出来的文字长度,所以不知道文字到底什么时候该换行,所以针对商品标题,可能多行的数据固定了一行18个字符。

2.是关于绘制图片的导出,按照官方api的说法应该在draw()完成的回调中执行,但是通过

这种方式,一直不回调完成。不知道哪里出问题了。所以最后只好加了一个延时去保存图片。

2) { break; } goodsTitleArray.push(goodsTitle.substr(i * 18,18)); } const price = this.data.orderDetail.price; const marketPrice = this.data.orderDetail.marketPrice; const title1 = '您的好友邀请您一起分享精品好货'; const title2 = '立即打开看看吧'; const codeText = '长按识别小程序码查看详情'; const imgWidth = 780; const imgHeight = 1600;

const canvasCtx = wx.createCanvasContext('shareCanvas');
//绘制背景
canvasCtx.setFillStyle('white');
canvasCtx.fillRect(0,390,800);
//绘制分享的标题文字
canvasCtx.setFontSize(24);
canvasCtx.setFillStyle('#333333');
canvasCtx.setTextAlign('center');
canvasCtx.fillText(title1,195,40);
//绘制分享的第二行标题文字
canvasCtx.fillText(title2,70);
//绘制商品图片
canvasCtx.drawImage(goodPicPath,90,390);
//绘制商品标题
yOffset = 490;
goodsTitleArray.forEach(function (value) {
canvasCtx.setFontSize(20);
canvasCtx.setFillStyle('#333333');
canvasCtx.setTextAlign('left');
canvasCtx.fillText(value,20,yOffset);
yOffset += 25;
});
//绘制价格
yOffset += 8;
canvasCtx.setFontSize(20);
canvasCtx.setFillStyle('#f9555c');
canvasCtx.setTextAlign('left');
canvasCtx.fillText('¥',yOffset);
canvasCtx.setFontSize(30);
canvasCtx.setFillStyle('#f9555c');
canvasCtx.setTextAlign('left');
canvasCtx.fillText(price,40,yOffset);
//绘制原价
const xOffset = (price.length / 2 + 1) 24 + 50;
canvasCtx.setFontSize(20);
canvasCtx.setFillStyle('#999999');
canvasCtx.setTextAlign('left');
canvasCtx.fillText('原价:¥' + marketPrice,xOffset,yOffset);
//绘制原价的删除线
canvasCtx.setLineWidth(1);
canvasCtx.moveTo(xOffset,yOffset - 6);
canvasCtx.lineTo(xOffset + (3 + marketPrice.toString().length / 2)
20,yOffset - 6);
canvasCtx.setStrokeStyle('#999999');
canvasCtx.stroke();
//绘制最底部文字
canvasCtx.setFontSize(18);
canvasCtx.setFillStyle('#333333');
canvasCtx.setTextAlign('center');
canvasCtx.fillText(codeText,780);
//绘制二维码
canvasCtx.drawImage(qrCodePath,95,550,200,200);
canvasCtx.draw();
//绘制之后加一个延时去生成图片,如果直接生成可能没有绘制完成,导出图片会有问题。
setTimeout(function () {
wx.canvasToTempFilePath({
x: 0,y: 0,width: 390,height: 800,destWidth: 390,destHeight: 800,canvasId: 'shareCanvas',success: function (res) {
that.setData({
shareImage: res.tempFilePath,showSharePic: true
})
wx.hideLoading();
},fail: function (res) {
console.log(res)
wx.hideLoading();
}
})
},2000);
},

最后看下绘制出来的效果图。

生成图片之后就可以提示用户去保存分享了。

总结

以上所述是小编给大家介绍的微信小程序通过保存图片分享到朋友圈。编程之家 52php.cn 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读