我有一个图像绘制到一个html cavas。我希望能够旋转图像90度,但我似乎找不到一个例子,如何旋转整个画布上的图像,只有一个对象在画布上。
有没有人有示例代码来旋转整个画布90度?
我接受了下面的回答,但想提供额外的示例代码:http://jsfiddle.net/VTyNF/1/
<canvas id="myCanvas" width="578" height="200"></canvas>
<script>
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
context.translate(canvas.width/2,canvas.height/2)
context.rotate(90 * (Math.PI / 180));
context.beginPath();
context.rect(188 - canvas.width/2, 50 - canvas.height/2, 200, 100);
context.fillStyle = 'yellow';
context.fill();
context.lineWidth = 7;
context.strokeStyle = 'black';
context.stroke();
</script>
5条答案
按热度按时间ss2ws0br1#
你必须在画画布之前应用这个旋转。你不能旋转任何已经画好的东西。
因此:
要旋转画布,
content.rotate()
需要一个弧度值。因此,首先,让我们使用以下函数将Angular 转换为弧度:您可能希望在旋转之前先平移画布,以便正确设置其原点。
context.translate(context.width/2,context.height/2);
一旦我们知道我们想要什么值,我们只需要在画任何东西之前旋转画布!
请注意,在您的示例中,您绘制的矩形也在
context.rect(
X,Y,W,H)'的前两个参数中偏移。我发现将宽度设置为变量更容易,然后通过简单的数学运算自动重新定位框,注意现在它完美地位于中心,并且旋转得很好!
0s0u357o2#
假设你的
canvas
元素有id
“foo”,在JavaScript中你可以这样做:uttx8gqw3#
你能用CSS把
<canvas>
元素旋转成transform: rotate(90deg);
吗?5us2dqdw4#
你可以通过处理像素数据轻松地将图像旋转90度,如果你的画布不是正方形的,你将不得不做出一些选择来决定什么是“正确的”答案。
使用
getImageData
函数检索像素,以常规方式处理它们,然后使用putImageData
显示结果。vh0rcniy5#
此版本不需要90度转弯的中心点:(对于新手来说不太容易,因为它是一个每个像素4个值的1d数组。
如果有人试图理解其中的逻辑:
应该是:
因为对于旋转后的数组,
x
表示行数,height表示行长,但是结果是相同的。逆时针旋转版本: