小程序canvas居中剪裁绘制图片

本文介绍如何使用微信小程序API将图片等比例缩放到指定画布大小,并确保图片不变形。通过获取图片实际尺寸并计算其在画布上的显示尺寸及位置,最终实现图片在画布中居中显示且不被拉伸。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如上图,绘制图片时,将图片等比例缩放至铺满画布,然后只显示图片最中间部分。

  1. 获取图片信息
wx.getImageInfo({
    src: url,
    success: function (res) {
      resolve(res);
    },
    fail: function (error) {
      console.log("读取头像错误", error)
      reject(error);
    }
})
复制代码

2.获取图片在绘制时的宽高及坐标

getCanvasInfo(canvW,canH){
    const imgX = head_img.width;//图片的实际宽度
    const imgY = head_img.height;//图片的实际高度
    let dWidth = 0;//图片按比例缩放后的宽
    let dHeight = 0;//图片按比例缩放以后的高
    if (imgX > imgY) {
      dHeight = canH;
      dWidth = imgX / (imgY / canH);
      if (dWidth < canvW) {
        dWidth = canvW;
        dHeight = imgY / (imgX / canvW);
      }
    } else {
      dWidth = canvW;
      dHeight = imgY / (imgX / canvW);
      if (dHeight < canH) {
        dHeight = canH;
        dWidth = imgX / (imgY / canH);
      }
    }
    const dx = (dWidth - canvW) / 2;//图像的左上角在目标canvas上 X 轴的位置
    const dy = (dHeight - canH) / 2;//图像的左上角在目标canvas上 Y 轴的位置
}

复制代码
  1. 开始绘制图片
const canvW = 650;//画布的宽
const canvH = 575;//画布的高
getCanvasInfo(canvW,canH)
context.drawImage(img, -dx, -dy, dWidth, dHeight);
复制代码

至此就可以得到一个不会被拉伸或者挤压变形的图片了。

转载于:https://juejin.im/post/5b052fdbf265da0b7452871f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值