微信小程序前端自定义分享的实现方法

作者:没人懂还可以问神 时间:2024-05-02 16:13:35 

背景

目前手上有一个小程序的项目,希望转发时分享消息的界面能够自定义,然而微信小程序只提供设置图片的url和title。


/**
 * 用户点击右上角分享
 */
onShareAppMessage: function() {
 return {
  imageUrl:'',
  title:''
 };
}

实现

微信小程序前端自定义分享的实现方法

我们要转发的显示内容多了一点东西:头像,用户名和点赞数。好在这个排版不是很复杂,所以我们思考了一下通过canvas去生成一张图片再return canvas所生成的图片url。

代码如下(其实还要作出一些显示上的优化,具体你们自己去调试):

先在页面里新建一个canvas 标签


<canvas canvas-id="canvasid" style="width: 375px; height: 500px;" wx:if="{{canvasShow}}"></canvas>

  let context = wx.createCanvasContext('canvasid')
  context.drawImage(back.path, 0, 60, backWidth, backHeight) //绘制下方背景图
  //绘制圆形头像,参考教程:https://www.jianshu.com/p/9a6ee2648d6f 第二种方法

context.save();
  var d = 2 * 25;
  var cx = 0 + 25;
  var cy = 0 + 25;
  context.arc(cx, cy,25, 0, 2 * Math.PI);
  context.clip();
  context.drawImage(avatar.path, 0,0, d, d);
  context.restore();
  //绘制名字和点赞数
  context.setFontSize(14)
  context.fillText('userName', 70, 32)
  let zanLength = ('100' + '次赞').length
  context.fillText('100'+ '次赞', 375 - 14 * zanLength, 32)
  //执行draw进行渲染 并返回图片url
  context.draw(true, () => {
   //此方法应执行在draw的回调中
   wx.canvasToTempFilePath({
    x: 0,
    y: 0,
    width: 375,
    height: 400,
    destWidth: 375,
    destHeight: 400,
    canvasId: 'canvasid',
    success(res) {
   //设置onShareAppMessage所返回的数据格式
     let shareInfo = {
      title: 'customTitle',
      imageUrl
     }
     //隐藏画布
     that.setData({
      canvasShow: false
     })
    }
   })
  });

然而!

在canvas中绘制的图片要在真机上显示出来是有问题的(画布污染),非同源的图片在canvas不会显示出来的。后来我们使用 wx.getImageInfo去获取图片信息,通过里面的地址去显示图片(相当于是把图片转了一道)。


    wx.getImageInfo({
       src: imgUrl,
       success: function(res) {
          /**拿到返回值res[0].path,再把该值作为canvas绘制图片的路径
           context.drawImage(res[0].path,x,x,x)**/
         let drawImgUrl = res[0].path
       }
     });

emmmm....文章很短暂,这里只是提供一下解决的思路,希望能帮助到大家~

来源:https://juejin.im/post/5d00abdd6fb9a07ebd48cecd

标签:微信小程序,自定义,分享
0
投稿

猜你喜欢

  • python/Matplotlib绘制复变函数图像教程

    2023-08-03 07:36:43
  • oracle学习笔记(二)

    2012-01-05 18:59:20
  • Python入门基本操作列表排序用法详解

    2021-01-02 15:42:02
  • 深入浅析Vue中mixin和extend的区别和使用场景

    2024-05-29 22:42:43
  • ASP同一站点下gb2312和utf-8页面传递参数乱码的终极解决方法

    2011-02-20 11:00:00
  • Golang算法问题之整数拆分实现方法分析

    2023-07-01 00:39:36
  • JS 实现10进制转换36进制的示例代码

    2024-04-28 09:50:01
  • python提取照片坐标信息的实例代码

    2023-06-01 16:37:10
  • Python中JSON的使用方法(超详细)

    2023-11-15 23:04:19
  • Python中函数带括号和不带括号的区别及说明

    2023-01-23 05:23:28
  • python3使用pandas获取股票数据的方法

    2023-01-04 15:01:15
  • 利用git克隆历史版本(下载指定版本的代码)

    2022-06-14 11:03:17
  • SQL截取字符串函数分享

    2024-01-23 23:09:59
  • sql表连接查询使用方法(sql多表连接查询)

    2024-01-22 12:25:39
  • 用Python解数独的方法示例

    2021-01-31 18:38:44
  • 使用Pytorch搭建模型的步骤

    2022-03-05 21:28:38
  • 显示某日期所在星期的所有日期asp代码

    2008-06-01 16:05:00
  • JavaScript 编程引入命名空间

    2007-10-11 19:00:00
  • MySQL source导入很慢的解决方法

    2024-01-25 18:25:49
  • django queryset相加和筛选教程

    2022-09-10 11:04:43
  • asp之家 网络编程 m.aspxhome.com