Skip to content

Commit 1f16156

Browse files
committed
docs: edit canvas
1 parent 8544384 commit 1f16156

File tree

1 file changed

+74
-30
lines changed

1 file changed

+74
-30
lines changed

docs/canvas.md

Lines changed: 74 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,80 @@ var ctx = canvas.getContext('2d');
596596
ctx.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) {
668742
canvas.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

Comments
 (0)