html转为canvas,HTML5 Canvas 转换

HTML5 Canvas 转换

HTML5 Canvas的转换方法,在线实例演示如何使用HTML5 Canvas进行旋转、移动、缩放,围绕不同点旋转,缩放比例设置等。

您可以将转换应用于HTML5画布上绘制的任何内容。这是您可以应用的转换的列表:移动(移动绘制的内容)

旋转

缩放

本文中介绍所有这些转换

转换矩阵

可以在2D上下文中设置转换矩阵。此矩阵将乘以画布上绘制的所有内容。对于本教程中使用的示例,我将其设置为“身份”矩阵,该矩阵乘以x,y坐标集后得出x,y。换句话说,不进行任何转换。

这是将转换矩阵设置为单位矩阵的方法:context.setTransform(1, 0, 0, 1, 0, 0);

移动

可以将移动应用于画布上绘制的所有内容。移动意味着所画内容的重定位。这是您在代码中设置移动的方式:var x = 100;

var y =  50;

context.translate(x, y);

本示例将在画布上绘制的所有形状在x轴上移动100,在y轴上移动50。

注意:平移仅适用于translate()调用函数后绘制的形状。在该函数调用之前绘制的形状不受影响。

这是另一个示例。在相同的坐标处绘制了两个矩形,但是在translate()调用该函数之前绘制了一个矩形,在之后绘制了一个矩形

示例

HTML5 Canvas not supported

var canvas  = document.getElementById("ex1");

var context = canvas.getContext("2d");

context.fillStyle = "#ff0000";

context.fillRect(10,10, 100, 100);

context.translate(50, 25);

context.fillStyle = "#0000ff";

context.fillRect(10,10, 100, 100);

测试看看 ‹/›

这是在画布上绘制时的结果:HTML5 Canvas not supported

旋转

您可以将自动旋转应用于在HTML5画布上绘制的任何形状。这是通过rotate()2D上下文上的功能完成的 。这是一个简单的示例:context.rotate(radians);

旋转角度作为参数传递给rotate()函数。该值必须以弧度而不是度为单位。

设置旋转后绘制的所有形状都将绕画布上的0,0点旋转。这是画布的左上角。

与平移一样,旋转仅应用于rotate() 调用函数后绘制的所有形状。

这是在设置旋转前后绘制相同矩形的示例:

示例

HTML5 Canvas not supported

var canvas  = document.getElementById("ex2");

var context = canvas.getContext("2d");

context.fillStyle = "#ff0000";

context.fillRect(10,10, 100, 100);

context.rotate( (Math.PI / 180) * 25);  //rotate 25 degrees.

context.fillStyle = "#0000ff";

context.fillRect(10,10, 100, 100);

测试看看 ‹/›

这是在画布上绘制矩形时的外观:HTML5 Canvas not supported

围绕不同点旋转

如前所述,所有形状都围绕画布(0,0)的左上角旋转。但是,如果您希望形状绕不同的点旋转怎么办?例如,围绕其自身的中心旋转形状?

要围绕其自身的中心旋转形状,必须首先将画布平移到形状的中心,然后旋转画布,然后将画布平移回0,0,然后绘制形状。

这是一个代码示例,它使蓝色矩形围绕其中心旋转:

示例

HTML5 Canvas not supported

var canvas  = document.getElementById("ex3");

var context = canvas.getContext("2d");

var x      = 10;

var y      = 10;

var width  = 100;

var height = 100

var cx     = x + 0.5 * width;

var cy     = y + 0.5 * height;

context.fillStyle = "#ff0000";

context.fillRect(x, y, width, height);

context.translate(cx, cy);

context.rotate( (Math.PI / 180) * 25);  //rotate 25 degrees.

context.translate(-cx, -cy); //set center back to 0,0

context.fillStyle = "#0000ff";

context.fillRect(x, y, width, height);

测试看看 ‹/›

这是在画布上绘制时的外观:HTML5 Canvas not supported

此示例首先将画布的中心平移(移动)到正方形的中心(cx,cy)。然后将画布旋转25度。然后,它将画布再次转换回0,0。现在,画布围绕cx,cy旋转了25度。您绘制的所有内容都将围绕cx,cy旋转显示。最终,该矩形被绘制为好像什么都没发生一样,但是现在它将围绕cx,cy旋转25度。这仅使用转换调用即可实现。矩形的坐标不变。请注意context.fillRect(),绘制红色和蓝色矩形的两个调用是如何相同的。正是它们之间的转换调用使它们出现在不同的位置和旋转位置

缩放

可以对在HTML5画布上绘制的所有形状应用自动缩放。

缩放时,可以通过某些因素缩放x轴和y轴上的所有坐标。您可以使用scale()函数设置这些因素,如下所示:var scaleX = 2;

var scaleY = 2;

context.scale(scaleX, scaleY);

本示例将x轴和y轴上的所有坐标缩放2倍。

与translate()和一样rotate(),缩放比例仅适用于scale()调用后绘制的形状。

这是另一个绘制红色和蓝色矩形的代码示例,其中缩放比例适用于蓝色矩形:

示例

HTML5 Canvas not supported

var canvas  = document.getElementById("ex5");

var context = canvas.getContext("2d");

var x      = 10;

var y      = 10;

var width  = 100;

var height = 100

context.fillStyle = "#ff0000";

context.fillRect(x, y, width, height);

context.scale(2,2);

context.fillStyle = "#0000ff";

context.fillRect(x, y, width, height);

测试看看 ‹/›

这是在画布上生成的grapichs:HTML5 Canvas not supported

请注意,蓝色矩形的大小是红色矩形的两倍。

还要注意,从蓝色矩形的左上角到画布的左上角(0,0)的距离也两倍。所有坐标都缩放了两倍,矩形的左上角坐标也是如此。如果要避免在缩放时移动形状,则必须将缩放与平移结合起来.

缩放比例

您可以使用缩放功能来实现比例缩放功能。下面的画布包含4个矩形。画布下方是一个输入字段,可用于更改缩放级别(缩放比例).HTML5 Canvas not supported

缩放程度:

如果看到带有缩放级别值的文本字段,请输入介于1到10之间的缩放级别,然后跳出文本字段以查看结果。如果看到滑块,则只需移动滑块即可.

平移,旋转和缩放组合

当然可以将所有三个转换组合在同一画布上。但是,就像组合旋转和平移时一样,对2D上下文进行函数调用的顺序也很重要。如果scale()在调用translate() 等之前调用,则结果看起来会有所不同。您可能需要对函数调用的顺序进行一些调整才能使其正确

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值