canvas画布,小程序端画base64、网络图片

常用于保存海报,二维码等;
除了画base64格式的图片,其他的在HTML、vue等一样;
就拿一个例子来说吧:在这里插入图片描述
这是一个常见的邀请效果图,可以看成这几部分:

1. 背景图
2. 中间的白色背景图
3. 中间的二维码
4. 文字

步骤

1. 创建画布

<canvas style="width: 380px; height: 600px;" canvas-id="firstCanvas" @click="download"></canvas>

创建项目什么的就不说了,能到达这一步,说明肯定会了;
<canvas></canvas>标签创建画布;
上边的宽高值指的是画布的尺寸,按自己需要修改;
canvas-id是这个画布的id,就是根据这个id在画布上作画;
@click是触发保存,你也可以换成长按@longpress等事件;

2. 画图片

让我们先把背景图画上去,我这现在用的是本地的图片;

先声明画布,不声明怎么画是不;

  var ctx = wx.createCanvasContext('firstCanvas');
 ctx.drawImage(图片路径 , x轴位置 , y轴位置 , 宽度 , 高度);
 ctx.draw();

drawImage是在画布上面画图片,后面的是图片的路径位置,大小等参数,缺一不可;

白色图片也是这种方法,只是注意顺序即可,就会覆盖到第一张图片上面,效果图:
在这里插入图片描述

3. 画文字

剩下的就是在画布上面写文字;

ctx.setFillStyle('#999999')//文字颜色:默认黑色
ctx.setFontSize(12)        //设置字体大小,默认10
ctx.textAlign = 'center'	// 设置位置
ctx.font = 'normal 12px 楷体';	// 字体样式
ctx.fillText(文字内容 , 宽度, 高度);
ctx.draw();

按照这样的写法,设置样式,内容等,按照顺序写进去即可;效果图:
在这里插入图片描述

画base64图片

var code=this.data.base;
      /*code是指图片base64格式数据*/
      //声明文件系统
      const fs = wx.getFileSystemManager();
      //随机定义路径名称
      var times = new Date().getTime();
      var codeimg = wx.env.USER_DATA_PATH + '/' + times + '.png';
      //将base64图片写入
      fs.writeFile({
        filePath: codeimg,
        data: code.slice(22),
        encoding: 'base64',
        success: () => {
          //写入成功了的话,新的图片路径就能用了
          var ctx = wx.createCanvasContext('firstCanvas');
          ctx.drawImage('../../bg.png', 0, 0, 380, 600);
          ctx.drawImage(codeimg, 90, 180, 200, 200);
          ctx.draw();
        }
      });
    },

就是相当于在本地临时储存了一下,然后画进去;

最后用ctx.draw();结束,效果图:在这里插入图片描述

到这,绘制完成了,剩下的就是保存了。

保存

download() {
    var _this = this;
    wx.canvasToTempFilePath({
      // 把画布转化成临时文件
      x: 0,
      y: 0,
      width: 380, // 截取的画布的宽
      height: 600, // 截取的画布的高
      destWidth: 380, // 保存成的画布宽度
      destHeight: 600, // 保存成的画布高度
      fileType: 'jpg', // 保存成的文件类型
      quality: 1, // 图片质量
      canvasId: 'firstCanvas', // 画布ID
      success(res) {
        // 2-保存图片至相册
        wx.saveImageToPhotosAlbum({
          // 存成图片至手机
          filePath: res.tempFilePath,
          success(res2) {
            wx.hideLoading();
            wx.showToast({
              title: '保存成功',
              duration: 2000
            });
          },
          fail(res3) {
            if (res3.errMsg === 'saveImageToPhotosAlbum:fail auth deny') {
              wx.showToast({
                title: '保存失败,稍后再试',
                duration: 2000,
                icon: 'none'
              });
              wx.hideLoading();
            } else {
              wx.showToast({
                title: '保存失败,稍后再试',
                duration: 2000,
                icon: 'none'
              });
              wx.hideLoading();
            }
          }
        });
      },
      fail() {
        uni.showToast({
          title: '保存失败,稍后再试',
          duration: 2000,
          icon: 'none'
        });
        uni.hideLoading();
      }
    });
  }

方法里面的尺寸、方法等按照自己需要调整;
网络链接图片一样;
这样就保存成功了;
所写博客皆为自己的心得,如有错误欢迎指出,侵删,谢谢

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦夏木禾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值