You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Konva.js中旋转图片后如何在画布上居中?

解决Canvas旋转图片后居中的方法

核心思路是调整Canvas的坐标系原点到画布中心,旋转后再以新原点为基准绘制图片,这样旋转后图片会自然保持居中。具体步骤如下:

  • 保存当前Canvas状态
    修改坐标系前,用ctx.save()保存当前绘图状态,避免影响后续绘制操作。

  • 平移坐标系原点到画布中心
    计算画布中心坐标,执行ctx.translate(canvas.width/2, canvas.height/2),把原点移到画布正中间。

  • 执行旋转操作
    将角度转为弧度(公式:角度值 * Math.PI / 180),用ctx.rotate(旋转弧度值)完成旋转。

  • 调整图片绘制位置
    绘制图片时,把左上角定位到(-img.width/2, -img.height/2),让图片中心与当前坐标系原点(画布中心)重合,旋转后自然保持居中。

  • 恢复Canvas状态
    绘制完成后,用ctx.restore()恢复之前保存的绘图状态,确保后续绘制不受影响。

示例代码片段

// 假设canvas、ctx、img已获取,rotation为旋转角度(度数)
const drawCenteredRotatedImage = () => {
  ctx.save();
  
  // 平移原点到画布中心
  ctx.translate(canvas.width / 2, canvas.height / 2);
  // 转弧度并执行旋转
  ctx.rotate((rotation * Math.PI) / 180);
  
  // 绘制图片,偏移自身宽高的一半实现居中
  ctx.drawImage(img, -img.width / 2, -img.height / 2);
  
  ctx.restore();
};

注意:如果你的代码是先绘制图片再旋转,必然会出现偏移问题,必须调整顺序:先平移坐标系→旋转→再绘制图片,这样旋转的是整个坐标系,图片的相对中心位置不会改变。

内容的提问来源于stack exchange,提问作者bonlim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:32:07