首页 > 编程语言 >微信小程序 canvas

微信小程序 canvas

时间:2024-01-21 21:35:14浏览次数:30  
标签:canvas dpr 微信 程序 ctx res data wx

  1. 页面绑定canvas
<view style='width:0px;height:0px;overflow:hidden;'>
<!-- 
//调试时候可用直接将canvas显示在页面上
//调试完成将canvas隐藏
<canvas  id="canvasContaner" type="2d" ></canvas>-->
<canvas  id="canvasContaner" type="2d"  style="position:fixed;left:9999px" ></canvas> 
</view>
  1. onReady时获取canvas对象并设置画布尺寸
onReady() {
    const query = wx.createSelectorQuery()
    query.select('#canvasContaner')
      .fields({
        node: true,
        size: true
      })
      .exec((res) => {
        // console.log(res)
        const canvas = res[0].node
        const ctx = canvas.getContext('2d')
        this.setData({
          canvas,
          ctx
        })
        const dpr = wx.getSystemInfoSync().pixelRatio;
        // console.log(wx.getSystemInfoSync())
        canvas.width = res[0].width * dpr;
        canvas.height = res[0].height * dpr;
        canvas.width = 1024 * dpr;
        canvas.height = 968 * dpr;
        ctx.scale(dpr, dpr)

        ctx.fillStyle = "#FFF";
        ctx.fillRect(0, 0, 1024, 968)
      })
  }
  1. 部分绘图函数
//绘制图片
//image可用传递代码中的图片文件(注意路径需要是相对路径)
//也可以直接传递base64字符串
//本地路径也支持(例如下载网络图片到本地随后再进行绘制的本地路径)
//需要注意如果是本地路径需要添加微信的路径(wx.env.USER_DATA_PATH)  例如: let filePath = wx.env.USER_DATA_PATH + "/" + fileName;
async drawImg(img, x, y, width, height) {
    return new Promise((resolve, reject) => {
      try {
        const image = this.data.canvas.createImage()
        image.onload = () => {
          this.data.ctx.drawImage(
            image,
            x,
            y,
            width,
            height,
          )
          resolve(img)
        }
        image.src = img;
      } catch (error) {
        console.log(error)
        reject(error)
      }
    });

  }
  1. 文字
drawText(txt, x, y, font) {
    //魔法绘画-让小朋友线稿变电影大片
    this.data.ctx.font = font;
    this.data.ctx.fillText(txt, x, y);
  }

//字体指定时需要注意格式
调用方式  this.drawText("test", 512 - 150, 768 - 35, "20px sans-serif");
  1. 填充背景
this.data.ctx.fillStyle = "#FFF";
this.data.ctx.fillRect(0, 0, 1024, 968)
  1. 保存canvas结果到图片中
wx.showLoading();
wx.canvasToTempFilePath({
      canvas: this.data.canvas,
      success(res) {
        wx.saveImageToPhotosAlbum({
          filePath: res.tempFilePath,
          success: function (res) {
            // console.log(res)
            wx.hideLoading()

            wx.showToast({
              title: '保存成功',
              icon: "success"
            })
          },
          fail: function (err) {
            // console.log(err)
            wx.hideLoading()

            wx.showToast({
              title: err,
              icon: "none"
            })
          }
        })
      }
    })

标签:canvas,dpr,微信,程序,ctx,res,data,wx
From: https://www.cnblogs.com/ives/p/17978405

相关文章

  • [Mac软件]App Cleaner & Uninstaller 8.2.6应用程序清理和卸载
    AppCleaner&Uninstaller是一款Mac应用程序,它可以帮助用户完全删除应用程序及其相关的服务文件、扩展文件等。以下是该应用程序的主要功能:完全删除应用程序:通过将应用程序图标拖到垃圾桶中删除程序,可以彻底清除应用程序及其相关文件,释放磁盘空间。删除所有类型的服务文件:除了删除......
  • 《程序是怎样跑起来的》第一、二章
    一、计算机的硬件组成1. CPU:中央处理器,负责解释和运行最终转换成机器语言的程序内容。2. 内存:主存,通过控制芯片与CPU相连,负责存储指令和数据。3. 寄存器:可以用来暂存指令、数据等处理对象,可以看做是内存。CPU有20-100个寄存器,控制器、运算器和时钟也包含在CPU中。二、......
  • 《程序是怎样跑起来的》第一章随笔
    对我来说CPU是什么?相当于人们的大脑,在计算机中是关键核心之一。CPU是什么?CPU中文名为中央处理器,相当于计算机的大脑,由寄存器,控制器,运算器和时钟组成用来将指令的执行顺序组织起来,并按照规定的顺序进行操作,以确保计算机系统能够正常运行。寄存器寄存器可用来暂存指令、数据等......
  • 《程序怎样跑起来的》第一章观后收获
    通过阅读第一章,我了解到了CPU是由运算器、控制器、时钟以及寄存器这四部分组成,其中寄存器又分为基址、变址、累加、指令、栈、通用以及标志寄存器,都分别具有不同的功能负责不同的工作;程序的执行其实通过将高级语言转换成汇编语言调动相应的指令执行任务;指令集通过程序计数器排列,逐......
  • Go语言核心36讲 04 | 程序实体的那些事儿(上)
    我已经为你打开了Go语言编程之门,并向你展示了“程序从初建到拆分,再到模块化”的基本演化路径。一个编程老手让程序完成基本演化,可能也就需要几十分钟甚至十几分钟,因为他们一开始就会把车开到模块化编程的道路上。我相信,等你真正理解了这个过程之后,也会驾轻就熟的。上述套路是......
  • Go语言核心36讲 06 | 程序实体的那些事儿 (下)
    在上一篇文章,我们一直都在围绕着可重名变量,也就是不同代码块中的重名变量,进行了讨论。还记得吗?最后我强调,如果可重名变量的类型不同,那么就需要引起我们的特别关注了,它们之间可能会存在“屏蔽”的现象。必要时,我们需要严格地检查它们的类型,但是怎样检查呢?咱们现在就说。我今天......
  • Go语言核心36讲 05 | 程序实体的那些事儿(中)
    在前文中,我解释过代码块的含义。Go语言的代码块是一层套一层的,就像大圆套小圆。一个代码块可以有若干个子代码块;但对于每个代码块,最多只会有一个直接包含它的代码块(后者可以简称为前者的外层代码块)。这种代码块的划分,也间接地决定了程序实体的作用域。我们今天就来看看它们之......
  • 对程序员来说cpu是什么
    CPU很内存是由许多晶体管组成的电子部件,通常称为IC(IntegratedCircuit,集成电路)。CPU的内部由寄存器、控制器、运算器、和时钟四个部分组成,各个部分之间由电流信号相互连通。寄存器可用来暂存指令数据等处理对象。控制器负责把内存上的指令、数据读入寄存器、并更具指令的执行情况......
  • 无涯教程-Node.js - 扩展程序
    Node.js以单线程模式运行,但是它使用事件驱动来处理并发,它还有助于创建子进程,以在基于多核CPU的系统上利用并行处理。子进程始终具有三个流child.stdin,child.stdout和child.stderr,它们可以与父级的stdio流共享处理。Node提供了child_process模块,该模块具有以下三种创建......
  • 程序是怎样跑起来的观后感
    读完之后我理解了CPU的内部构成和CPU的作用。CPU各个部分之间由电流信号相互连通,CPU可以直接识别并使用的语言。在计算机的构成元素之中CPU负责程序的解释和运行。并且理解程序是什么由什么组成。程序是把寄存器作为对象来描述的。程序的运行主要是由硬件和软件共同完成的。当我们......