【问题标题】:Canvas: draw multiple rotated and resized images at required position画布:在所需位置绘制多个旋转和调整大小的图像
【发布时间】:2020-08-03 16:02:26
【问题描述】:

我需要将多张图片放入画布中。图像应旋转、调整大小并放置在特定坐标处。所以总的来说我需要

ctx.drawImage(img,left,top, width, height); 

但旋转了。

我想出了这个功能:

function drawRotated(image, context, angle, left, top, width, height) {
    context.save();
    context.translate(width / 2, height / 2);
    context.rotate(Math.PI / 180 * angle);
    context.drawImage(image, left - width / 2, top - height / 2, width, height);
    context.restore();
}

但它似乎并没有完全按照需要工作。看起来旋转后我需要使用旋转将图像变成的新宽度和高度重新计算位置。但我无法弄清楚数学。我是否需要实际做三角函数来计算所有这些,还是有一个简单的解决方案?谢谢。

【问题讨论】:

标签: canvas html5-canvas


【解决方案1】:

我认为你只需要将翻译步骤替换为

context.translate(left + width / 2, top + height / 2);

同样的旋转,然后

context.drawImage(image, - width / 2, - height / 2, width, height);

因此

function drawRotated(image, context, angle, left, top, width, height) {
    context.save();
    context.translate(left + width / 2, top + height / 2);
    context.rotate(Math.PI / 180 * angle);
    context.drawImage(image, - width / 2, - height / 2, width, height);
    context.restore();
}

【讨论】:

  • 哇,这确实有效。有很多解决方案,大约 50-200 行代码。但这一个确实有效。谢谢,太棒了。您能否编辑完整功能的答案,以便我将其标记为答案?
猜你喜欢
  • 2021-02-14
  • 2014-11-21
  • 2017-10-19
  • 2023-03-22
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 2021-10-28
  • 2017-08-22
相关资源
最近更新 更多