zoukankan      html  css  js  c++  java
  • 抖音小程序海报

    ttml:

    <view class="container">
      <view class="body canvas-space">
        <canvas canvas-id="canvas" style="{{375 * rpx}}px;height:{{600 * rpx}}px" class="canvas"></canvas>
      </view>
    
      <view catchtap='save' class="saveImg">保存优惠券</view>
    </view>

    ttjs:

    onLoad: function (option) {
       this.ctx = tt.createCanvasContext('canvas');
       let res = tt.getSystemInfoSync()
        this.setData({
          rpx: res.windowWidth / 375
        })
        this.setData({
          rpx: res.windowWidth / 375
        })
    }
    drawBackground() {
        var that = this
        let ctx = this.ctx;
        let res = tt.getSystemInfoSync()
        let rpx = res.windowWidth / 375
        console.log('res.windowWidth',res)
    
        that.setData({
          rpx: res.windowWidth / 375
        })
    
        //我是大背景
        ctx.setFillStyle('#602671');    //为创建的canvans上下文添充颜色  如果没有设置 fillStyle,默认颜色为 black。
        ctx.fillRect(0, 0, 375 * rpx, 600 * rpx)
    
        //我是白色背景
        ctx.setFillStyle('white');    //为创建的canvans上下文添充颜色  如果没有设置 fillStyle,默认颜色为 black。
        ctx.fillRect(27.5 * rpx, 58 * rpx, 320 * rpx, 495 * rpx)
    
    
    
        ctx.save();
        ctx.beginPath(); //开始绘制
        //  先画个圆
        // ctx.arc(190 * rpx, 60 * rpx, 30 * rpx, 0 * rpx, Math.PI * 2, false);  //false代表顺时针  图片的位置加半径
        // ctx.setStrokeStyle('white')
        ctx.clip();//画了圆 再剪切  原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内
        ctx.drawImage('/image/logo2.png', 158 * rpx, 30 * rpx, 60 * rpx, 60 * rpx); // 推进去图片
        ctx.restore(); //恢复之前保存的绘图上下文 恢复之前保存的绘图上下文即状态 可以继续绘制
    
        ctx.drawImage('/image/top.png', 27.5 * rpx, 50 * rpx, 320 * rpx, 10 * rpx);
        ctx.drawImage('/image/logo2.png', 160 * rpx, 31 * rpx, 60 * rpx, 47 * rpx);
    
        ctx.drawImage('/image/tit.png', 110 * rpx, 100 * rpx, 150 * rpx, 60 * rpx);
    
       
    
        ctx.setFillStyle("#602671");
        ctx.setFontSize(30 * rpx);                               //字大小
        ctx.setTextAlign('left');                        //是否居中显示,参考点画布中线
        ctx.fillText(this.data.coupon.order_price, 143 * rpx, 157 * rpx);
    
        ctx.setFillStyle("#602671");
        ctx.setFontSize(30 * rpx);                               //字大小
        ctx.setTextAlign('left');                        //是否居中显示,参考点画布中线
        ctx.fillText(this.data.coupon.price, 230 * rpx, 157 * rpx);
    
        ctx.drawImage('/image/border.png', 73 * rpx, 175 * rpx, 230 * rpx, 230 * rpx);
    
        ctx.drawImage(this.data.code, 78 * rpx, 180 * rpx, 220 * rpx, 220 * rpx);
    
        ctx.drawImage('/image/line.png', 15 * rpx, 420 * rpx, 344 * rpx, 24 * rpx);
    
        ctx.drawImage('/image/text.png', 50 * rpx, 465 * rpx, 280 * rpx, 70 * rpx);
    
        ctx.drawImage('/image/bottom.png', 27 * rpx, 550 * rpx, 320 * rpx, 10 * rpx);
       
    
        ctx.draw();
    
    
      },
    
      draw() {
        var that = this
        let ctx = this.ctx;
        ctx.clearRect(0, 0, 300, 300); //每一次都要将canvas清空一下,不然秒针就会一直显示在canvas上面   
        this.drawBackground();
        ctx.draw();
        //  that.saveImg()
        // var t = setTimeout(function () {
        //   that.saveImg()
        //   clearTimeout(t)
        // }, 2000)
    
      },
    
      save() {
        var that = this
        tt.authorize({
          scope: "scope.album",
          success:function(res) {
            console.log('success',res);
            // 用户同意授权用户信息
            that.saveImg()
          },
          fail:function(res) {
            console.log('fail',res);
            tt.showToast({
              title: '保存失败',
              icon: 'error'
            })
          }
        });
      },
      saveImg() {
        let that = this;
    
    
        console.log(111111111)
        // var rpx = 1
        let rpx = that.data.rpx
        console.log('rpx',rpx)
        try {
    
          tt.canvasToTempFilePath({
            x: 0,
            y: 0,
             375 * rpx,                     //画布宽高
            height: 600 * rpx,
            destWidth: 1125 * rpx,                 //画布宽高*dpr 以iphone6为准
            destHeight: 1800 * rpx,                //放大2倍以上,解决保存的图片模糊的问题
            canvasId: 'canvas',
            success: function (res) {
              console.log('success--------', res) //生成的临时图片路径
              tt.saveImageToPhotosAlbum({
                filePath: res.tempFilePath,
                success: function (res) {
                  // console.log(res);
                  tt.showToast({
                    title: '保存成功',
                  })
                  tt.redirectTo({
                    url: "/pages/index/index",
                    success:function(redirectTo_res11) {
                      console.log(redirectTo_res11);
                    },
                    fail:function(redirectTores) {
                      console.log(`redirectTo 调用失败`);
                    },
                  });
                },
                fail: function () {
    
                  console.log('a')
                }
              })
            },
            complete: function (res) {
              console.log('complete---------', res)
            },
            fail: function (res) {
              console.log('error---------', res)
            }
          })
        } catch (e) {
          console.log('e-----', e)
        }
        //  console.log(3333)
      }
  • 相关阅读:
    【模板时间】◆模板·III◆ 单调子序列
    【学时总结】◆学时·VII◆ 高维DP
    【例题收藏】◇例题·IV◇ Wooden Sticks
    【赛时总结】◇赛时·VI◇ Atcoder ABC-104
    【例题收藏】◇例题·III◇ 木と整数 / Integers on a Tree
    【学时总结】◆学时·VI◆ SPLAY伸展树
    【模板时间】◆模板·II◆ 树链剖分
    【赛时总结】◇赛时·V◇ Codeforces Round #486 Div3
    【例题收藏】◇例题·II◇ Berland and the Shortest Paths
    【例题收藏】◇例题·I◇ Snuke's Subway Trip
  • 原文地址:https://www.cnblogs.com/liweitao/p/13710438.html
Copyright © 2011-2022 走看看