@@ -596,6 +596,80 @@ var ctx = canvas.getContext('2d');
596596ctx .canvas === canvas // true
597597```
598598
599+ ### 图像变换
600+
601+ 以下方法用于图像变换。
602+
603+ - ` CanvasRenderingContext2D.rotate() ` :图像旋转
604+ - ` CanvasRenderingContext2D.scale() ` :图像缩放
605+ - ` CanvasRenderingContext2D.translate() ` :图像平移
606+
607+ ` CanvasRenderingContext2D.rotate() ` 方法用于图像旋转。它接受一个弧度值作为参数,表示顺时针旋转的度数。
608+
609+ ``` javascript
610+ var canvas = document .getElementById (' myCanvas' );
611+ var ctx = canvas .getContext (' 2d' );
612+
613+ ctx .rotate (45 * Math .PI / 180 );
614+ ctx .fillRect (70 , 0 , 100 , 30 );
615+ ```
616+
617+ 上面代码会显示一个顺时针倾斜45度的矩形。注意,` rotate() ` 方法必须在` fillRect() ` 方法之前调用,否则是不起作用的。
618+
619+ 旋转中心点始终是画布左上角的原点。如果要更改中心点,需要使用` translate() ` 方法移动画布。
620+
621+ ` CanvasRenderingContext2D.scale() ` 方法用于缩放图像。它接受两个参数,分别是` x ` 轴方向的缩放因子和` y ` 轴方向的缩放因子。默认情况下,一个单位就是一个像素,缩放因子可以缩放单位,比如缩放因子` 0.5 ` 表示将大小缩小为原来的50%,缩放因子` 10 ` 表示放大十倍。
622+
623+ ``` javascript
624+ var canvas = document .getElementById (' myCanvas' );
625+ var ctx = canvas .getContext (' 2d' );
626+
627+ ctx .scale (10 , 3 );
628+ ctx .fillRect (10 , 10 , 10 , 10 );
629+ ```
630+
631+ 上面代码中,原来的矩形是 10 x 10,缩放后展示出来是 100 x 30。
632+
633+ 如果缩放因子为1,就表示图像没有任何缩放。如果为-1,则表示方向翻转。` ctx.scale(-1, 1) ` 为水平翻转,` ctx.scale(1, -1) ` 表示垂直翻转。
634+
635+ ``` javascript
636+ var canvas = document .getElementById (' myCanvas' );
637+ var ctx = canvas .getContext (' 2d' );
638+
639+ ctx .scale (1 , - 2 );
640+ ctx .font = " 16px serif" ;
641+ ctx .fillText (' Hello world!' , 20 , - 20 );
642+ ```
643+
644+ 上面代码会显示一个水平倒转的、高度放大2倍的` Hello World! ` 。
645+
646+
647+ ``` javascript
648+ ctx .translate ( x, y )// 位移:把图像原点位移到(x, y)的位置
649+ ctx .rotate ( deg )// 旋转:旋转 deg 度数
650+ ctx .scale ( sx, sy )// 缩放:在横向进行 sx 倍的缩放,在纵向进行 sy 倍的缩放
651+ ```
652+
653+ 缩放出现的问题
654+ 1.如果有` lineWith ` ,宽度也会缩放
655+ 2.如果起始点不是` (0, 0) ` ,起始点也会缩放
656+
657+ ### 变换矩阵
658+
659+ ``` javascript
660+ ctx .transform (a, b, c, d, e, f);
661+ /*
662+ a:水平缩放(默认值1)
663+ b:水平倾斜(默认值0)
664+ c:垂直倾斜(默认值0)
665+ d:垂直缩放(默认值1)
666+ e:水平位移(默认值0)
667+ f:垂直位移(默认值0)
668+ */
669+ ```
670+
671+ ` context.transform() ` 可以叠加使用,如果需要重新初始化矩阵变换的值,可以用` context.setTransform(a, b, c, d, e, f) ` 。它会使得之前设置的` context.transform() ` 失效,恢复为单位矩阵然后再` transform ` 。
672+
599673## HTMLCanvasElement.toDataURL(),HTMLCanvasElement.toBlob()
600674
601675` <canvas> ` 元素的` toDataURL() ` 方法,可以将 Canvas 数据转为 Data URI 格式的图像。
@@ -668,36 +742,6 @@ function blobToImg(blob) {
668742canvas .toBlob (blobToImg);
669743```
670744
671- ## 图像变换
672-
673- ### 平移、旋转、缩放
674-
675- ``` javascript
676- ctx .translate ( x, y )// 位移:把图像原点位移到(x, y)的位置
677- ctx .rotate ( deg )// 旋转:旋转 deg 度数
678- ctx .scale ( sx, sy )// 缩放:在横向进行 sx 倍的缩放,在纵向进行 sy 倍的缩放
679- ```
680-
681- 缩放出现的问题
682- 1.如果有` lineWith ` ,宽度也会缩放
683- 2.如果起始点不是` (0, 0) ` ,起始点也会缩放
684-
685- ### 变换矩阵
686-
687- ``` javascript
688- ctx .transform (a, b, c, d, e, f);
689- /*
690- a:水平缩放(默认值1)
691- b:水平倾斜(默认值0)
692- c:垂直倾斜(默认值0)
693- d:垂直缩放(默认值1)
694- e:水平位移(默认值0)
695- f:垂直位移(默认值0)
696- */
697- ```
698-
699- ` context.transform() ` 可以叠加使用,如果需要重新初始化矩阵变换的值,可以用` context.setTransform(a, b, c, d, e, f) ` 。它会使得之前设置的` context.transform() ` 失效,恢复为单位矩阵然后再` transform ` 。
700-
701745## 动画
702746
703747利用 JavaScript,可以在 Canvas 元素上很容易地产生动画效果。
0 commit comments