【发布时间】:2016-05-22 15:21:57
【问题描述】:
下面是我目前使用的代码。使用0 旋转,图像被正确缩放以填充画布。 (类似于background-size: cover,除了在 Canvas 上使用 JavaScript)
我正在尝试添加旋转功能,具有以下功能。
旋转时保持图像居中。我尝试在
translate中使用width / 2,然后在drawImage中使用相反的方法,但是您可以看到图像没有居中。我不确定这是否与我之前的x和y居中代码冲突,或者这里是否需要三角函数?自动进一步缩放图像以覆盖画布。这些是任意旋转,而不是 90 度增量。除了填充画布角落所需的图像外,我不想再裁剪任何图像。这比我习惯处理的三角函数复杂得多。
我认为这可以通过Math.sin 和Math.cos 完成,但是我已经很久没有使用它们了。我特别不确定如何实现#2。任何帮助,将不胜感激。
var canvas = document.querySelector('canvas')
var context = canvas.getContext('2d')
var image = new Image()
image.src = 'http://i.stack.imgur.com/7FsbT.jpg'
image.onload = function () {
var maxScaleX = canvas.width / image.width
var maxScaleY = canvas.height / image.height
scale = maxScaleX > maxScaleY ? maxScaleX : maxScaleY
var width = image.width * scale
var height = image.height * scale
var x = (width - canvas.width) / -2
var y = (height - canvas.height) / -2
var degrees = 30
context.setTransform(1, 0, 0, 1, 0, 0) // reset previous translate and/or rotate
context.translate(width / 2, height / 2)
context.rotate(degrees * Math.PI / 180)
context.drawImage(image, x - width / 2, y - height / 2, width, height)
}
<canvas width="350" height="150" style="border: solid 1px black"></canvas>
【问题讨论】:
-
查看此内容以获得您的问题的答案。 stackoverflow.com/a/34689191/3877726
标签: html canvas rotation trigonometry cover