美文网首页
小程序canvas绘制海报二维码

小程序canvas绘制海报二维码

作者: 唐人不自醉 | 来源:发表于2019-06-18 15:35 被阅读0次
    <canvas  canvas-id="shareImg" style="width:{{sWidth}}px;height:{{sHeight}}px;"></canvas>
    <view hidden='{{hidden}}'>    
    <image src='{{imgurl}}'></image>
    <button  bindtap='save'>保存图片到相册</button>
    </view>
    

    当前页面的js

    import Info from"../../utils/util.js";//引入外部js
    data: {
        hidden: true,
        code: "",
        title: "",
        imgs: "",
        imgUrl: "",
        sHeight:"",
        sWidth:''
      },
      //请求海报封面和二维码
      let that=this;
        wx.downloadFile({
          url: 'https://test.ydlweb.com/attachment/images/2/2018/12/We2LEFr8J2HFR8JZle2jEc4g742czl.jpg  ',
          success: (res) => {
            that.setData({
              imgs: res.tempFilePath
            })
          }
        })
        wx.downloadFile({
          url: "https://test.ydlweb.com/attachment/images/2/8a6eebb2bb264ef6cae34cf45ca9794b.png",
          success: (res) => {
            that.setData({
              code: res.tempFilePath
            })
    
          }
        })
        //获取设备的宽高,因为canvas中像素是px而不是rpx
        let that=this;
        wx.getSystemInfo({
          success: function (res) {
            console.log(res);
            that.setData({
              sHeight: 912 / 750 * res.screenWidth,//设计稿上面的宽高
              sWidth: res.screenWidth
            })
            setTimeout(() => {
              Info.getPhone(that.data.code, that.data.imgs, that.data.sWidth, that.data.sHeight, 'shareImg', 'center', 'red','yellow',)//调用外部封装好的js
            },5000)
            
          }
        })
        //保存海报到手机相册
        save: function () {
        var that = this
        wx.saveImageToPhotosAlbum({
          filePath: that.data.imgurl,
          success(t) {
            wx.showModal({
              content: '图片已保存到相册',
              showCancel: false,
              confirmText: '好的',
              success: function (t) {
                if (t.confirm) {
                  console.log('用户确定了');
                  that.setData({
                    hidden: true
                  })
                }
              },
              
            })
          },
          fail: function (t) {
            console.log("失败", t);
            wx.getSetting({
              success: function (t) {
                t.authSetting["scope.writePhotosAlbum"] || (console.log("进入信息授权开关页面"),                    wx.openSetting({
                  success: function (t) {
                    console.log("openSetting success", t.authSetting);
                  }
                }));
              }
            });
          }
      })},
    

    封装好的外部canvas

    const getPhone = (code, imgs, sWidth, sHeight, classNames, textStyle, successCallback, textcolor, codecolor )=>{
      let that = this;
        const variableNum =sWidth / 750;
        const ctx = wx.createCanvasContext(classNames);
        ctx.drawImage(code, 250 * variableNum, 650 * variableNum, 100, 100); //绘制二维码
        ctx.drawImage(imgs, 40, 10, 600 * variableNum, 400 * variableNum);  //绘制图片
        ctx.setTextAlign(textStyle)
      ctx.setFillStyle(codecolor)
        ctx.setFontSize(28)
        ctx.fillText("我是文字部分....", 400 * variableNum, 500 * variableNum)
      ctx.setFillStyle(textcolor)
        ctx.fillText("长按二维码....", 400 * variableNum, 600 * variableNum)
        ctx.stroke()
        ctx.draw();
      setTimeout(function () {  //这里要加定时器,转成图片需要一定的时间,不然是不出来图片的哦
        // canvas画布转成图片
        var i = getCurrentPages(), a = i[i.length - 1];//获取当前引用该方法的data里面的值
        wx.canvasToTempFilePath({
          x: 0,
          y: 0,
          width: 580,
          height: 680,
          destWidth: 580,
          destHeight: 680,
          canvasId: classNames,
          fileType: 'png',  
          success: (res)=>{
            console.log(res);
            successCallback
              a.setData({
                imgurl: res.tempFilePath,
                hidden: false
              })
          },
          fail: function () {
            console.log("保存失败......")
          }
        })
      }, 2000)
    }
    
    module.exports = {//将此回调暴露出去
      getPhone: getPhone
    }
    

    原文:https://blog.csdn.net/weixin_43647163/article/details/87566077

    相关文章

      网友评论

          本文标题:小程序canvas绘制海报二维码

          本文链接:https://www.haomeiwen.com/subject/fjvfqctx.html