微信小程序里面使用canvas画布的正确姿势

本文介绍了如何在微信小程序中利用canvas画布实现图文结合的宣传图保存到手机本地的需求。详细讨论了wxml和js的实现方式,包括图片下载和阴影效果的绘制,并提供了保存canvas的基本步骤。

1.前言
前几天刚好有这么一个需求,保存一个图文结合的图文的宣传图到手机本地,然后就选择使用canvas画布来实现这个需求。微信小程序这个canvas坑还是有点多。
需求
//图片

将这个设计稿用canvas绘制出来
2.开始实现功能

2.1 wxml

    <view class="container">
      <canvas canvas-id="shareCanvas" class='canvas-style'>
      </canvas>
      <view class="linkcopy">
        <text>分享链接</text>
        <text bindtap="uploads">保存图片</text>
      </view>
    </view>

2.2 js
定义一个函数用来初始化实例

    drawing: function () {
    	//定义全局canvas
        const ctx = wx.createCanvasContext('shareCanvas');
    	//绘制背景色
        ctx.setFillStyle('#FAFAFA')
        ctx.fillRect(0, 0, 312, 455)
    	//背景图
        var shearbg = wx.getStorageSync('shearbg');
        ctx.drawImage(shearbg, 0, 0, 312, 166)
    	 // 标题
        ctx.setFillStyle('#333333')
        ctx.font = 'normal bold 15px sans-serif'
        ctx.fillText('绿地新都会', 25, 190)
        // 二维码
        var qrcode = wx.getStorageSync('qrcode');
        ctx.drawImage(qrcode, 93.75, 290, 124.5, 111)
		// 填充一个白色矩形
    	ctx.setFillStyle('white')
    	ctx.setShadow(0, 5, 16, 'rgba(185,185,185,0.5)');// 设置阴影
   	   ctx.fillRect(17, 140, 280, 300)
       ctx.draw();  //实例化完成
       wx.hideLoading()  // 弹窗消失
    }

这里大概写一下 没有写完 ,因为绘制类容比较多,所以只举例绘制图片文字view 还有阴影之类的

    // 下载二维码并存入缓存
        var that = this;
        wx.getImageInfo({
          src: "https://yun.fangsale.com/public/miniPicture/images/framework/pic2.png",
          success: function (res) {
            wx.setStorageSync('qrcode', res.path);
    
          }
        })

这里主要是下载线上图片,因为线下图片包过大不能上传,线上不能用来直接绘制,所以的下载到本地

2.3 保存canvas

    uploads: function () {
        var that = this;
        var timer  = setTimeout(function(){
          wx.canvasToTempFilePath({
            x: 0,
            y: 0,
            width: 312,
            height: 455,
            destWidth: 936,
            destHeight: 1365,
            canvasId: 'shareCanvas',
            success(res) {
              wx.saveImageToPhotosAlbum({
                filePath: res.tempFilePath,
                success: function (data) {
                  wx.showToast({
                    title: '保存成功,快去分享吧',
                    icon: 'none',
                    duration: 2000
                  })
                  clearTimeout(timer)
                },
                fail: function (error) {
                  console.log(error)
                  wx.showToast({
                    title: '很遗憾,保存失败',
                    icon: 'none',
                    duration: 2000
                  })
                  clearTimeout(timer)
                }
              })
            }
          })
        },1000)
    }

3.基本就是这么多啦。
在这里插入图片描述
成功。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值