小程序 | canvas 2d篇 - 基础库 2.7.0 开始支持

这篇具有很好参考价值的文章主要介绍了小程序 | canvas 2d篇 - 基础库 2.7.0 开始支持。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

众所周知,小程序的迭代是很快的,时不时就会有文档更新。前面写了一篇小程序 | canvas篇,今天再更新一下Canvas,因为旧版canvas接口不再维护了,所以把新版canvas 2d接口记录一下:

(官方更新图)

微信小程序canvas 2d画网络图片,小程序,微信小程序,微信

先把差异点记录下:

① wxml中的修改:

旧版:使用 canvas-id 属性唯一标识 canvas。

新版:使用 id 标识,还要添加 type="2d" 属性标识为新版 Canvas 2D 接口。

修改如下:

<canvas id="canvas" type='2d' style="width: 171px;height: 305px;margin:0 auto;" />

② 获取canvas:

旧版:使用 wx.createCanvasContext 同步获取 CanvasContext。

const ctx = wx.createCanvasContext('myCanvas');

新版:通过 SelectorQuery 异步获取 Canvas 对象,再通过 Canvas.getContext 获取渲染上下文 RenderingContext。

wx.createSelectorQuery().select('#canvas').fields({ node: canvas })=>{

      const ctx = canvas.getContext('2d');

}).exec()

修改如下:

wx.createSelectorQuery().select('#canvas').fields({ node: true, size: true }).exec((rect)=>{
      const canvas = rect[0].node;
      const ctx = canvas.getContext('2d');
})

③ 绘制图片:

旧版: CanvasContext.drawImage 直接传入图片 url 进行绘制。

新版: 先通过 Canvas.createImage 创建图片对象,onload 图片加载完成回调触发后,再将图片对象传入 ctx.drawImage 绘制。

修改如下:

const image = canvas.createImage();
image.src = cardbg;
image.onload = ()=>{
    ctx.drawImage(image, 0, 0, 150, 100);
}

④ 绘制文字:

旧版:方法里面传参设置 

新版:属性赋值设置

修改如下:

ctx.fillStyle = '#fff'; 

⑤ 绘制方法:

旧版:需要调用 CanvasContext.draw 才会进行绘制,并且绘制过程是异步的,需要等待绘制完成回调才能进行下一步操作。

新版:绘制方法会同步绘制到画布上。不需要再进行draw,直接在绘制完成后清空画布。

修改如下:

ctx.clearRect(0, 0, canvas.width, canvas.height)

⑥ 画布保存为图片:

旧版:wx.canvasToTempFilePath 接口传入canvasId。

新版:wx.canvasToTempFilePath 接口传入canvas。

修改如下:

wx.canvasToTempFilePath({
   // canvasId: 'myCanvas',  //旧版
   canvas: canvas,
   success: function (res) { })
});

实现代码:

getCanvas(headImg, codeImg ) {
    let that = this;
    let { cardbg } = that.data;
    wx.createSelectorQuery().select('#canvas').fields({ node: true, size: true }).exec((rect)=>{
      const canvas = rect[0].node;
      that.setData({  canvas })
      const ctx = canvas.getContext('2d');
      canvas.width = rect[0].width
      canvas.height = rect[0].height

      let rpx = 1;
      wx.getSystemInfo({
        success(res) {
          rpx = res.windowWidth / 375;
          wx.getImageInfo({
            src: cardbg,
            success(res) {
              let imgScale = 1;
              let imgW = res.width; //图片宽度
              let imgH = res.height; //图片高度
              let canvasWidth = canvas.width; //画布宽度
              let canvasHeight = canvas.height * .777; //画布高度
              let x = 0;
              let y = 0;
              let imgScalew = canvasWidth / imgW;
              let imgScaleh = canvasHeight / imgH;
              if (imgScalew > imgScaleh) {
                imgScale = imgScalew
                y = -(imgScale * imgH - canvasHeight) / 2
              } else {
                imgScale = imgScaleh
                x = -(imgScale * imgW - canvasWidth) / 2
              }

              const image = canvas.createImage(); //背景图
              image.src = cardbg;
              image.onload = ()=>{
                ctx.drawImage(image, 0, 0, imgW, imgH, x, y, imgScale * imgW, imgScale * imgH);
              }
             
              ctx.fillStyle = '#fff';
              ctx.fillRect(0, 474 / 2 *rpx , 342 / 2*rpx , 228 / 2 *rpx)
              ctx.fontSize = 14*rpx;
              ctx.fillStyle = '#3D3D3D';
              ctx.fillText("我是昵称", 50*rpx , (474 / 2 + 34)*rpx );
              const avatarImage = canvas.createImage();  // 3.绘制头像
              avatarImage.src = codeImg;
              avatarImage.onload = ()=>{
                ctx.arc(24*rpx, 271*rpx , 24 *rpx, 0, Math.PI * 2, false);
                ctx.clip();
                ctx.drawImage(avatarImage, 0, 247*rpx , 48*rpx , 48*rpx )
              }

            }
          })
        },
        
      })
      
      // 绘制前清空画布
      ctx.clearRect(0, 0, canvas.width, canvas.height)
      // 这里绘制完成
      console.log('draw done')

    });
    
  },

文中差异点只提到项目需求中有用到的,其他业务暂时没涉及到的就没展示,大家可自行去官方文档查看。文章来源地址https://www.toymoban.com/news/detail-784923.html

到了这里,关于小程序 | canvas 2d篇 - 基础库 2.7.0 开始支持的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序使用canvas绘制网络图片,使用canvas将图片变成圆形

    以上的写法 会造成某些图标无法绘制上去, 解决方法是在网络图片中不断嵌套,先绘制大图片,再绘制小图片的顺序 网上说使用先下载到本地,再使用img.src加载,我尝试过还是不行 长用在海报,需要将用户的头像画到canvas图片上,如: 其原理就是在图片上面放一个圆

    2024年02月13日
    浏览(47)
  • 微信小程序云开发基础版也开始收费了

    之前把菜谱小程序的爬虫服务由SpringBoot迁移为了基于Node.js的微信云开发,原因是当时想为本来配置就不高的云服务器腾出一点地方,想当初云开发基础版还是免费的,因为基础版确实适合用来学习和测试,它的配额也不是很高,完美的满足了我。 然而今天我在B站菜谱小程序

    2024年02月11日
    浏览(32)
  • 从零基础开始开发自己的第一个微信小程序

    通过本篇blog,你可以熟悉从零开始,搭建小程序开发环境,并运行起自己的第一个小程序。 1、 注册账号 2、 下载开发工具搭建开发环境 3、 创建工程,编写代码 4、 手机上查看效果 通过以上四步就能创建属于自己的小程序了。 注册完成后是这样的 小程序开发工具下载地址

    2024年02月14日
    浏览(50)
  • 微信小程序 Canvas裁切案例

    源于 https://ask.csdn.net/questions/7797682 效果 输入 输出 环境 基础库版本 2.20.x使用的新版的canvas(也不算新两三年了)。 知识点 canvas base64转临时路径 代码 index.wxml index.wxss index.js 重点 代码没有进行封装,仅仅只是方便预览 源码 完整代码片段 https://developers.weixin.qq.com/s/ERW91Dma7QCP 私

    2024年02月09日
    浏览(27)
  • 微信小程序 新版canvas绘制图片方法

    截至2022.12.23 修改日 微信小程序开发文档介绍不全,导致很多用户绘制图片不显示或失败,因此写下截至目前的可行方案 如果新手不熟悉canvas,先看下小程序官方文档 可运行案例: wxml: js:

    2024年02月12日
    浏览(33)
  • 微信小程序canvas生成图片并保存

    需求: 做一个类似下图的功能。图片内容是动态的,用canvas画出来,生成临时图片,再保存。 实现:  其他使用,查看微信开发文档  

    2024年02月13日
    浏览(38)
  • 微信小程序新版canvas绘制图片方法

    今天在做项目使用到了canvas绘制二维码,发现以前的方法被弃用了。 wxml: 如果想要绘制需要将起临时存储起来,写入成功的就可以进行绘制了。(如果是点击展示二维码,最好是先将数据写到onLoad事件中,在将要绘制的东西写到点击事件中去,在点击事件中去获取数据);

    2024年02月11日
    浏览(36)
  • 微信小程序实现canvas画圆形微信头像

    1.需要获取用户信息,拿到用户头像图片 2.实例化一个canvas对象,绘制出圆形并将头像固定到圆形中心位置 3.实现效果      

    2024年02月15日
    浏览(29)
  • 【微信小程序】解决canvas组件层级最高问题

    1、为什么canvas组件总是会在最上层? 因为canvas组件是由客户端创建的原生组件, 原生组件层级是最高的 ,所以页面中的其他组件无论设置 z-index 为多少都无法盖在原生组件上 。 2、如何解决canvas层级最高问题?                                                    wx

    2024年02月11日
    浏览(32)
  • 微信小程序--canvas画布实现图片的编辑

    上传图片,编辑图片大小,添加文字,改变文字颜色等 微信小程序--canvas画布实现图片的编辑 软件环境:微信开发者工具 官方下载地址:微信开发者工具下载地址与更新日志 | 微信开放文档 1、基本需求。 实现上传图片 实现图片编辑 实现添加文字 实现导出图片 2、案例目录

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包