收藏
回答

canvas画布旋转?

为什么我的画布旋转后原来的尺寸变大的是为什么

这是旋转前

这是旋转后的画布

回答关注问题邀请回答
收藏

2 个回答

  • 微盟
    微盟
    2022-11-06

    旋转画笔设置不对吧

    // pages/canvas/index.js
    Page({
      /**
       * 像素转换
       * @param {*} arg 
       */
      rpx2px(arg) {
        const info = wx.getSystemInfoSync()
        const width = info.screenWidth
        return arg * width / 750
      },
      imageLoad(canvas,url,callback){
       const img = canvas.createImage()
       console.log(img)
       img.onload = ()=>{
        if(callback)callback(img)
         console.log('img=',img)
       }
       img.src = url
      },
      /**
       * 页面的初始数据
       */
      data: {},
      /**
       * 生命周期函数--监听页面初次渲染完成
       */
      onReady() {
        const query = wx.createSelectorQuery()
        query.select('#cid')
          .fields({
            node: true,
            size: true
          })
          .exec((res) => {
            // Canvas 对象
            const canvas = res[0].node
            this.canvas = canvas
            // Canvas 画布的实际绘制宽高
            const width = res[0].width
            const height = res[0].height
            // 创建canvas渲染上下文
            const ctx = canvas.getContext('2d')
            const dpr = wx.getWindowInfo().pixelRatio
            console.log('---dpr', dpr)
            // 手动改变canvas的宽和高
            canvas.width = width * dpr
            canvas.height = height * dpr
            console.log(canvas.width, canvas.height)
            ctx.scale(dpr, dpr)
            ctx.fillStyle = 'orange'
            // 默认旋转按(0,0)点计算,所以如果要旋转矩形[0,200,750,500]的话,先修改中心点
            ctx.translate(this.rpx2px(750 / 2), this.rpx2px(500 / 2+200))
            // 再旋转90度
            ctx.rotate(90 * Math.PI / 180);
            // 还原中心点
            ctx.translate(-this.rpx2px(750 / 2), -this.rpx2px(500 / 2+200))
            // 后续绘制按旋转后的方式绘制
            this.imageLoad(canvas,'../../images/test.png',(res)=>{
              ctx.drawImage(res, this.rpx2px(0), this.rpx2px(200), this.rpx2px(750), this.rpx2px(500))
            })
          })
      }
    })
    
    2022-11-06
    有用
    回复
  • 清心.
    清心.
    2021-07-15
    // 点击旋转照片
    imgRotate(){
      const path=this.data.path
      var canvas = wx.createContext();
      // 图片的左右距离
        canvas.translate(100300);
        // 图片的旋转度数
        canvas.rotate(100 * Math.PI / 67.5);
        // 距离x和y轴的距离
        canvas.drawImage(path, 00250250);
        wx.drawCanvas({
            canvasId: 'image-canvas',
            actions: canvas.getActions()
        })
    },
    
    2021-07-15
    有用
    回复
登录 后发表内容