微信小程序canvas--分享朋友圈

作者: 小小_128 | 来源:发表于2020-01-07 11:59 被阅读0次

    这是第二次用canvas做分享朋友圈的图片了,这次先写个小日记吧

    效果图( 1.页面 2. 第一次微信官方授权弹窗 3. 第一次拒绝第二次自定义弹窗打开小程序设置 4. canvas生成的图片)

    image.png
    image.png
    image.png
    image.png

    wxml

    <view class="container">
        <view class="box">
            <image class="bg" src="/images/my/bg.jpg"></image>
            <image class="ewm" src="/images/my/ewm.jpg"></image>
        </view>
        <button bindtap="shareFriends">保存图片分享朋友圈</button>
        <!-- 画布 -->
        <canvas style="width: 286px;height: 415px;background:rgba(0,0,0,.5);position: fixed;top: -10000px;" canvas-id="shareFriends"></canvas>
    </view>
    
    <!-- 授权弹窗 -->
    <view class='open-seting-bg' wx:if='{{openSet}}' catchtap='cancleSet'>
      <view class='open-set-inner'>
        <view class='set-title'>是否打开授权设置?</view>
        <view class='btn-openset'>
          <view catchtap='cancleSet'>取消</view>
              <view>
                  <button open-type='openSetting' class='button-style' catchtap='cancleSet'>确定</button>
              </view>
        </view>
      </view>
    </view>
    

    js

    Page({
    
      /**
       * 页面的初始数据
       */
      data: {
        shareImg: ''
      },
    
      // 保存图片
      shareFriends: function () {
        wx.showLoading({
          title: '图片生成中',
        })
        // canvas绘图
        this.createdCode();
        let that = this;
        //canvas画图需要时间而且还是异步的,所以加了个定时器
        setTimeout(() => {
          // 将生成的canvas图片,转为真实图片
          wx.canvasToTempFilePath({
            x: 0,
            y: 0,
            canvasId: 'shareFriends',
            success: function (res) {
              console.log('res', res);
              let shareImg = res.tempFilePath;
              that.setData({
                shareImg: shareImg,
                showShareModal: false
              })
              // 保存图片
              that.saveImg();
              // loading停止
              wx.hideLoading()
            },
            fail: function (res) {}
          })
        }, 500)
      },
    
      //开始绘图
      createdCode() {
        const ctx = wx.createCanvasContext('shareFriends'); 
    
        // 1. 绘制背景图
        ctx.save()
        ctx.drawImage('/images/my/bg.jpg', 0, 0, 286, 480);
        ctx.save();
    
       // 2. 绘制小程序logo
        ctx.beginPath();
        ctx.arc(145, 236, 40, 0, 2 * Math.PI);
        ctx.clip();
        // ctx.drawImage(img, x, y, d, d); 
        ctx.drawImage('/images/my/ewm.jpg', 105, 196, 80, 80);
        ctx.draw()
        // 绘制 封面图并裁剪(这里图片确定是按100%宽度,同时高度按比例截取,否则图片将会变形)
      },
    
      // 长按保存事件
      saveImg() {
        let that = this;
        // 获取用户是否开启用户授权相册
        wx.getSetting({
          success(res) {
            // 如果没有则获取授权
            if (!res.authSetting['scope.writePhotosAlbum']) {
              wx.authorize({
                scope: 'scope.writePhotosAlbum',
                success() {
                  wx.saveImageToPhotosAlbum({
                    filePath: that.data.shareImg,
                    success() {
                      wx.showToast({
                        title: '保存成功'
                      })
                    },
                    fail() {
                      wx.showToast({
                        title: '保存失败',
                        icon: 'none'
                      })
                    }
                  })
                },
                fail() {
                  // 如果用户拒绝过或没有授权,则再次打开授权窗口
                  //(ps:微信api又改了现在只能通过button才能打开授权设置,以前通过openSet就可打开,下面有打开授权的button弹窗代码)
                  that.setData({
                    openSet: true
                  })
                }
              })
            } else {
              // 有则直接保存
              wx.saveImageToPhotosAlbum({
                filePath: that.data.shareImg,
                success() {
                  wx.showToast({
                    title: '保存成功'
                  })
                },
                fail() {
                  wx.showToast({
                    title: '保存失败',
                    icon: 'none'
                  })
                }
              })
            }
          }
        })
      },
      // 取消授权
      cancleSet() {
        this.setData({
          openSet: false
        })
      },
    })
    

    下次再补充 (携带圆形的微信用户头像、文字以及有echarts圆形半分比的部分代码)
    积累在一点一滴中,路还长,我们一起共同进步吖

    相关文章

      网友评论

        本文标题:微信小程序canvas--分享朋友圈

        本文链接:https://www.haomeiwen.com/subject/thdractx.html