当前位置:
  1. 首页 »
  2. 笔记 »
  3. 正文

微信小程序canvas初始化、绘图、保存

零分 2,695

微信小程序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)

      },

    

微信小程序单指、双指操作图片/层(移动缩放)

微信小程序单指、双指操作图片/层WXML: <view class="myCanvas"> <image src="{{ loadSrc}}" class="img" bindtouchstart="touchstartCallback" bindtouchmove="touchmoveCallback" bindload="imgload" style="width: {{ scaleWidth }}px;height: {{ scaleHeight }}px;margin-top:{{marginTop}}px;margin-left:{{margin
笔记 2,764

微信小程序scroll-view下拉刷新,出现一直刷新

用scroll-view,主要原因是,可以在顶部固定一个模块,虽然position:fixed可以实现,但发现在真机上总会出现一条小白条,看着不是很舒服 scroll-view下拉刷新,需要用到几个属性:scroll-view官方说明 refresher-enabled:开启自定义下拉刷新 refresher-threshold:设置自定义下拉刷新阈值 refresher-default-style:设置自定义下拉刷新默认样式,支持设置 black | white | none, none 表示不使用默认样式 refresher-background:设置自定义下拉刷新区域背景颜色 refre
笔记 5,066

微信小程序scroll-view禁止滚动条

微信小程序禁用scroll-view滚动条 ::-webkit-scrollbar { display: none; } 其实也简单,就是这样一个CSS样式,关键是这个样式要放在哪里! 在写的时候,一直无法生效,翻看之前写的,也是一样的,但之前的可以生效! 认真翻看才发现,这个要在在app.wxss里,并不是写在页面上!如果怕兼容,可以全部都写上 ::-webkit-scrollbar { display:none; width: 0 !important; height: 0 !important; -webkit-appearance: none;
笔记 2,939

微信小程序开发新版本检测、网络请求、json格式判断封装

微信小程序开发新版本检测、网络请求、json格式判断封装,放在APP.JS里,方便各个页面调用。 App({}) 1、小程序新版本检测 if (wx.canIUse('getUpdateManager')) { const updateManager = wx.getUpdateManager() updateManager.onCheckForUpdate(function (res) { // 请求完新版本信息的回调 if (res.hasUpdate) { updateManager.onUpdateReady(
笔记 2,665