小程序
小游戏
企业微信
微信支付
扫描小程序码分享
为什么我的画布旋转后原来的尺寸变大的是为什么
这是旋转前
这是旋转后的画布
2 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
旋转画笔设置不对吧
// 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)) }) }) } })
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
// 点击旋转照片 imgRotate(){ const path=this.data.path var canvas = wx.createContext(); // 图片的左右距离 canvas.translate(100, 300); // 图片的旋转度数 canvas.rotate(100 * Math.PI / 67.5); // 距离x和y轴的距离 canvas.drawImage(path, 0, 0, 250, 250); wx.drawCanvas({ canvasId: 'image-canvas', actions: canvas.getActions() }) },
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
旋转画笔设置不对吧
// 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)) }) }) } })
// 点击旋转照片 imgRotate(){ const path=this.data.path var canvas = wx.createContext(); // 图片的左右距离 canvas.translate(100, 300); // 图片的旋转度数 canvas.rotate(100 * Math.PI / 67.5); // 距离x和y轴的距离 canvas.drawImage(path, 0, 0, 250, 250); wx.drawCanvas({ canvasId: 'image-canvas', actions: canvas.getActions() }) },