微信小程序canvas初始化、绘图、保存
- 2,942
 
微信小程序canvas初始化、绘图、保存,记录保存一下
canvas初始化
/***初始化canvas */
    initCanvas(){
        // 通过 wx.createSelectorQuery()方法创建
        const query = wx.createSelectorQuery()
        query.select('#myCanvas') // canvas id
          .fields({ node: true, size: true })
          .exec((res) => {
            const canvas = res[0].node
            const ctx = canvas.getContext('2d')
            const dpr = wx.getSystemInfoSync().pixelRatio // 屏幕比例
            canvas.width = res[0].width * dpr
            canvas.height = res[0].height * dpr
            // 存入data 后面用到
            this.setData({
              ctx:ctx,
              canvas:canvas,
              cW:res[0].width * dpr,
              cH:res[0].height * dpr
            })
          })
         
      },
canvas绘图
/***绘制图画 */
      drawImg(x,y,Hx,Hy,CW){
          let that=this;
        const {ctx,canvas} = this.data 
        // 创建 image对象,因为新的canvas API ,在调用drawImage的时候需要传入一个image对象。
        const img = canvas.createImage()
        // 这个url地址,可以是微信获取头像的临时地址
        img.src = this.data.loadSrc
        img.onload = function() {
          // 图片加载后画
        //   ctx.drawImage(img, x, y,Hx,Hy)
        ctx.save();
        ctx.beginPath();
          ctx.arc(CW/2,CW/2,CW/2,0,2*Math.PI,false)
          ctx.clip();
          ctx.drawImage(img, x, y, Hx, Hy); // 推进去图片        
          ctx.closePath();
          ctx.restore();
          that.saveImgs();
        }
    },
canvas保存图片
 /***保存图片 */
saveimg:function() {
        let dpr = wx.getSystemInfoSync().pixelRatio // 屏幕比例
        let Hx=this.data.scaleWidth*dpr;
        let Hy=this.data.scaleHeight*dpr;
        let x=this.data.marginLeft*dpr;
        let y=this.data.marginTop*dpr;
        let cw=this.data.cW
        console.log(this.data.cH)
        console.log(this.data.cW)
        this.drawImg(x,y,Hx,Hy,cw)
       console.log(this.data.ctx);
       console.log(this.data.canvas.id);
    },
    async saveImgs() {
        let self = this;
        //这里是重点  新版本的type 2d 获取方法
        const query = wx.createSelectorQuery();
        const canvasObj = await new Promise((resolve, reject) => {
          query.select('#myCanvas')
            .fields({ node: true, size: true })
            .exec(async (res) => {
              resolve(res[0].node);
            })
        });
        console.log(canvasObj);
        wx.canvasToTempFilePath({
          //fileType: 'jpg',
          //canvasId: 'posterCanvas', //之前的写法
          canvas: canvasObj, //现在的写法
          success: (res) => {
            console.log(res);
            self.setData({ canClose: true });
            //保存图片
            wx.saveImageToPhotosAlbum({
              filePath: res.tempFilePath,
              success: function (data) {
                wx.showToast({
                  title: '已保存到相册',
                  icon: 'success',
                  duration: 5000,
                })
                // setTimeout(() => {
                //   self.setData({show: false})
                // }, 6000);
              },
              fail: function (err) {
                console.log(err);
                if (err.errMsg === "saveImageToPhotosAlbum:fail auth deny") {
                  console.log("当初用户拒绝,再次发起授权")
                } else {
                  util.showToast("请截屏保存分享");
                }
              },
              complete(res) {
                wx.hideLoading();
                console.log(res);
              }
            })
          },
          fail(res) {
            console.log(res);
          }
        }, this)
      },
声明:博客中如无特殊说明或标注的文章均为博客原创文章,部分文章来源互联网,如有侵犯您的版权,或者对零分博客发布的文章有异议,请来信告知删除、修改,如您有好的建议或者意见也可以来信,谢谢!
	
						
					
						
					







