1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 小程序快速生成朋友圈海报分享图

小程序快速生成朋友圈海报分享图

时间:2018-08-24 05:56:15

相关推荐

小程序快速生成朋友圈海报分享图

由于我们无法将小程序直接分享到朋友圈,但分享到朋友圈的需求又很多,业界目前的做法是利用小程序的 Canvas 功能生成一张带有小程序码的图片,然后引导用户下载图片到本地后再分享到朋友圈。相信大家在绘制分享图中应该踩到 Canvas 的各种(坑)彩dan了吧~

这里首先推荐一个开源的组件: painter(通过该组件目前我们已经成功在支付宝小程序上也应用上了分享图功能)

首先我们新增一个自定义组件,在该组件的json中引入painter

{"component": true,"usingComponents": {"painter": "/painter/painter"}}

然后组件的WXML (代码片段在最后)

// 将该组件定位在屏幕之外,用户查看不到。<painter style="position: absolute; top: -9999rpx;" palette="{{imgDraw}}" bind:imgOK="onImgOK" />

重点来了 JS (代码片段在最后)

Component({properties: {// 是否开始绘图isCanDraw: {type: Boolean,value: false,observer(newVal) {newVal && this.handleStartDrawImg()}},// 用户头像昵称信息userInfo: {type: Object,value: {avatarUrl: '',nickName: ''}}},data: {imgDraw: {}, // 绘制图片的大对象sharePath: '' // 生成的分享图},methods: {handleStartDrawImg() {wx.showLoading({title: '生成中'})this.setData({imgDraw: {width: '750rpx',height: '1334rpx',background: 'https://qiniu-/0506share-bg.png',views: [{type: 'image',url: 'https://qiniu-/1560248372315_467.jpg',css: {top: '32rpx',left: '30rpx',right: '32rpx',width: '688rpx',height: '420rpx',borderRadius: '16rpx'},},{type: 'image',url: this.data.userInfo.avatarUrl || 'https://qiniu-/default-avatar0707.png',css: {top: '404rpx',left: '328rpx',width: '96rpx',height: '96rpx',borderWidth: '6rpx',borderColor: '#FFF',borderRadius: '96rpx'}},{type: 'text',text: this.data.userInfo.nickName || '青团子',css: {top: '532rpx',fontSize: '28rpx',left: '375rpx',align: 'center',color: '#3c3c3c'}},{type: 'text',text: `邀请您参与助力活动`,css: {top: '576rpx',left: '375rpx',align: 'center',fontSize: '28rpx',color: '#3c3c3c'}},{type: 'text',text: `宇宙最萌蓝牙耳机测评员`,css: {top: '644rpx',left: '375rpx',maxLines: 1,align: 'center',fontWeight: 'bold',fontSize: '44rpx',color: '#3c3c3c'}},{type: 'image',url: 'https://qiniu-/0605index.jpg',css: {top: '834rpx',left: '470rpx',width: '200rpx',height: '200rpx'}}]}})},onImgErr(e) {wx.hideLoading()wx.showToast({title: '生成分享图失败,请刷新页面重试'})//通知外部绘制完成,重置isCanDraw为falsethis.triggerEvent('initData') },onImgOK(e) {wx.hideLoading()// 展示分享图wx.showShareImageMenu({path: e.detail.path,fail: err => {console.log(err)}})//通知外部绘制完成,重置isCanDraw为falsethis.triggerEvent('initData') }}})

那么我们该如何引用呢?

首先json里引用我们封装好的组件share-box

{"usingComponents": {"share-box": "/components/shareBox/index"}}

以下示例为获取用户头像昵称后再生成图。

<button class="intro" bindtap="getUserInfo">点我生成分享图</button><share-box isCanDraw="{{isCanDraw}}" userInfo="{{userInfo}}" bind:initData="handleClose" />

调用的地方:

const app = getApp()Page({data: {isCanDraw: false},// 组件内部关掉或者绘制完成需重置状态handleClose() {this.setData({isCanDraw: !this.data.isCanDraw})},getUserInfo(e) {wx.getUserProfile({desc: "获取您的头像昵称信息",success: res => {const { userInfo = {} } = resthis.setData({userInfo,isCanDraw: true // 开始绘制海报图})},fail: err => {console.log(err)}})}})

生成效果图如下

tips:

文字居中实现可以看下代码片段

文字换行实现(maxLines)只需要设置宽度,maxLines如果设置为1,那么超出一行将会展示为省略号

代码片段:https://developers./s/J38pKsmK7Qw5(下载片段前先打开微信开发者工具)

附上painter可视化编辑代码工具:点我直达,因为涉及网络图片,代码片段设置不了downloadFile合法域名,建议真机开启调试模式,开发者工具 详情里开启不校验合法域名进行代码片段的运行查看。

最后看下面大家评论问的较多的问题:downLoadFile合法域名在小程序后台 开发>开发设置里配置,域名为你图片的域名前缀 比如我文章里的图https://qiniu-/0605index.jpg。配置域名时填写https://qiniu-即可。如果你图片cdn地址为/xxx.png, 那你就配置即可。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。