1# CanvasRenderingContext2D对象
2
3>  **说明:**
4>
5>  从API version 4开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
6
7使用CanvasRenderingContext2D在canvas画布组件上进行绘制,绘制对象可以是矩形、文本、图片等。
8
9
10**示例:**
11  ```html
12  <!-- xxx.hml -->
13  <div>
14    <canvas ref="canvas1" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
15    <input type="button" style="width: 180px; height: 60px;" value="handleClick" onclick="handleClick" />
16    <input type="button" style="width: 180px; height: 60px;" value="antialias" onclick="antialias" />
17  </div>
18  ```
19
20  ```js
21  // xxx.js
22  export default {
23    handleClick() {
24      const el = this.$refs.canvas1;
25      const ctx = el.getContext('2d');
26      ctx.beginPath();
27      ctx.arc(100, 75, 50, 0, 6.28);
28      ctx.stroke();
29    },
30    antialias() {
31      const el = this.$refs.canvas1;
32      const ctx = el.getContext('2d', { antialias: true });
33      ctx.beginPath();
34      ctx.arc(100, 75, 50, 0, 6.28);
35      ctx.stroke();
36      }
37    }
38  ```
39
40- 示意图(关闭抗锯齿)
41
42  ![zh-cn_image_0000001214837333](figures/zh-cn_image_0000001214837333.png)
43
44- 示意图(开启抗锯齿)
45
46  ![zh-cn_image_0000001127125162](figures/zh-cn_image_0000001127125162.png)
47
48
49## 属性
50
51| 名称                                       | 类型                                       | 描述                                       |
52| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
53| [fillStyle](#fillstyle)                  | &lt;color&gt;&nbsp;\|&nbsp;[CanvasGradient](js-components-canvas-canvasgradient.md)&nbsp;\|&nbsp;CanvasPattern | 指定绘制的填充色。<br/>-&nbsp;类型为&lt;color&gt;时,表示设置填充区域的颜色。<br/>-&nbsp;类型为CanvasGradient时,表示渐变对象,使用&nbsp;createLinearGradient()方法创建。<br/>-&nbsp;类型为CanvasPattern时,使用&nbsp;createPattern()方法创建。 |
54| [lineWidth](#linewidth)                  | number                                   | 设置绘制线条的宽度。                               |
55| [strokeStyle](#strokestyle)              | &lt;color&gt;&nbsp;\|&nbsp;[CanvasGradient](js-components-canvas-canvasgradient.md)&nbsp;\|&nbsp;CanvasPattern | 设置描边的颜色。<br/>-&nbsp;类型为&lt;color&gt;时,表示设置描边使用的颜色。<br/>-&nbsp;类型为CanvasGradient时,表示渐变对象,使用&nbsp;createLinearGradient()方法创建。<br/>-&nbsp;类型为CanvasPattern时,使用&nbsp;createPattern()方法创建。 |
56| [lineCap](#linecap)                      | string                                   | 指定线端点的样式,可选值为:<br/>-&nbsp;butt:线端点以方形结束。<br/>-&nbsp;round:线端点以圆形结束。<br/>-&nbsp;square:线端点以方形结束,该样式下会增加一个长度和线段厚度相同,宽度是线段厚度一半的矩形。<br>默认值:butt |
57| [lineJoin](#linejoin)                    | string                                   | 指定线段间相交的交点样式,可选值为:<br/>-&nbsp;round:在线段相连处绘制一个扇形,扇形的圆角半径是线段的宽度。<br/>-&nbsp;bevel:在线段相连处使用三角形为底填充,&nbsp;每个部分矩形拐角独立。<br/>-&nbsp;miter:在相连部分的外边缘处进行延伸,使其相交于一点,形成一个菱形区域,该属性可以通过设置miterLimit属性展现效果。<br>默认值:miter |
58| [miterLimit](#miterlimit)                | number                                   | 设置斜接面限制值,该值指定了线条相交处内角和外角的距离。<br>默认值:10   |
59| [font](#font)                            | string                                   | 设置文本绘制中的字体样式。<br/>语法:ctx.font="font-style&nbsp;font-weight&nbsp;font-size&nbsp;font-family"<sup>5+</sup><br/>-&nbsp;font-style(可选),用于指定字体样式,支持如下几种样式:normal,&nbsp;italic。<br/>-&nbsp;font-weight(可选),用于指定字体的粗细,支持如下几种类型:normal,&nbsp;bold,&nbsp;bolder,&nbsp;lighter,&nbsp;100,&nbsp;200,&nbsp;300,&nbsp;400,&nbsp;500,&nbsp;600,&nbsp;700,&nbsp;800,&nbsp;900。<br/>-&nbsp;font-size(可选),指定字号和行高,单位只支持px。<br/>-&nbsp;font-family(可选),指定字体系列,支持如下几种类型:sans-serif,&nbsp;serif,&nbsp;monospace。<br>默认值:"normal&nbsp;normal&nbsp;14px&nbsp;sans-serif" |
60| [textAlign](#textalign)                  | string                                   | 设置文本绘制中的文本对齐方式,可选值为:<br/>-&nbsp;left:文本左对齐。<br/>-&nbsp;right:文本右对齐。<br/>-&nbsp;center:文本居中对齐。<br/>-&nbsp;start:文本对齐界线开始的地方。<br/>-&nbsp;end:文本对齐界线结束的地方。<br/>ltr布局模式下start和left一致,rtl布局模式下start和right一致。<br>默认值:left |
61| [textBaseline](#textbaseline)            | string                                   | 设置文本绘制中的水平对齐方式,可选值为:<br/>-&nbsp;alphabetic:文本基线是标准的字母基线。<br/>-&nbsp;top:文本基线在文本块的顶部。<br/>-&nbsp;hanging:文本基线是悬挂基线。<br/>-&nbsp;middle:文本基线在文本块的中间。<br/>-&nbsp;ideographic:文字基线是表意字基线;如果字符本身超出了alphabetic&nbsp;基线,那么ideographic基线位置在字符本身的底部。<br/>-&nbsp;bottom:文本基线在文本块的底部。&nbsp;与&nbsp;ideographic&nbsp;基线的区别在于&nbsp;ideographic&nbsp;基线不需要考虑下行字母。<br>默认值: alphabetic |
62| [globalAlpha](#globalalpha)              | number                                   | 设置透明度,0.0为完全透明,1.0为完全不透明。                |
63| [lineDashOffset](#linedashoffset)        | number                                   | 设置画布的虚线偏移量,精度为float。<br>默认值:0.0          |
64| [globalCompositeOperation](#globalcompositeoperation) | string                                   | 设置合成操作的方式。类型字段可选值有source-over,source-atop,source-in,source-out,destination-over,destination-atop,destination-in,destination-out,lighter,copy,xor。具体请参考[表 类型字段说明](#globalcompositeoperation)。<br>默认值:ource-over |
65| [shadowBlur](#shadowblur)                | number                                   | 设置绘制阴影时的模糊级别,值越大越模糊,精度为float。<br>默认值:0.0 |
66| [shadowColor](#shadowcolor)              | &lt;color&gt;                            | 设置绘制阴影时的阴影颜色。                            |
67| [shadowOffsetX](#shadowoffsetx)          | number                                   | 设置绘制阴影时和原有对象的水平偏移值。                      |
68| [shadowOffsetY](#shadowoffsety)          | number                                   | 设置绘制阴影时和原有对象的垂直偏移值。                      |
69| [imageSmoothingEnabled](#imagesmoothingenabled6)<sup>6+</sup> | boolean                                  | 用于设置绘制图片时是否进行图像平滑度调整,true为启用,false为不启用。<br>默认值:true |
70
71
72### fillStyle
73
74  ```html
75<!-- xxx.hml -->
76<div>
77  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
78</div>
79  ```
80
81```js
82// xxx.js
83export default {
84  onShow() {
85    const el =this.$refs.canvas;
86    const ctx = el.getContext('2d');
87    ctx.fillStyle = '#0000ff';
88    ctx.fillRect(20, 20, 150, 100);
89  }
90}
91```
92
93![zh-cn_image_0000001166962736](figures/zh-cn_image_0000001166962736.png)
94
95
96### lineWidth
97
98```html
99<!-- xxx.hml -->
100<div>
101  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
102</div>
103```
104
105```js
106// xxx.js
107export default {
108  onShow() {
109    const el =this.$refs.canvas;
110    const ctx = el.getContext('2d');
111    ctx.lineWidth = 5;
112    ctx.strokeRect(25, 25, 85, 105);
113  }
114}
115
116```
117
118![zh-cn_image_0000001166484430](figures/zh-cn_image_0000001166484430.png)
119
120
121### strokeStyle
122
123```html
124<!-- xxx.hml -->
125<div>
126  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
127</div>
128```
129
130```js
131// xxx.js
132export default {
133  onShow() {
134    const el =this.$refs.canvas;
135    const ctx = el.getContext('2d');
136    ctx.lineWidth = 10;
137    ctx.strokeStyle = '#0000ff';
138    ctx.strokeRect(25, 25, 155, 105);
139  }
140}
141```
142
143
144![zh-cn_image_0000001212124299](figures/zh-cn_image_0000001212124299.png)
145
146### lineCap
147
148```html
149<!-- xxx.hml -->
150<div>
151  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
152</div>
153```
154
155```js
156// xxx.js
157export default {
158  onShow() {
159    const el =this.$refs.canvas;
160    const ctx = el.getContext('2d');
161    ctx.lineWidth = 8;
162    ctx.beginPath();
163    ctx.lineCap = 'round';
164    ctx.moveTo(30, 50);
165    ctx.lineTo(220, 50);
166    ctx.stroke();
167  }
168}
169```
170
171![zh-cn_image_0000001214837127](figures/zh-cn_image_0000001214837127.png)
172
173### lineJoin
174
175```html
176<!-- xxx.hml -->
177<div>
178  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
179</div>
180```
181
182```js
183// xxx.js
184export default {
185  onShow() {
186    const el =this.$refs.canvas;
187    const ctx = el.getContext('2d');
188    ctx.beginPath();
189    ctx.lineWidth = 8;
190    ctx.lineJoin = 'miter';
191    ctx.moveTo(30, 30);
192    ctx.lineTo(120, 60);
193    ctx.lineTo(30, 110);
194    ctx.stroke();
195  }
196}
197```
198
199![zh-cn_image_0000001214717247](figures/zh-cn_image_0000001214717247.png)
200
201### miterLimit
202
203```html
204<!-- xxx.hml -->
205<div>
206  <canvas ref="canvas" style="width: 500px; height: 500px; "></canvas>
207</div>
208```
209
210```js
211// xxx.js
212export default {
213  onShow() {
214    const el =this.$refs.canvas;
215    const ctx = el.getContext('2d');
216    ctx.lineWidth =14;
217    ctx.lineJoin = 'miter';
218    ctx.miterLimit = 3;
219    ctx.moveTo(30, 30);
220    ctx.lineTo(120, 60);
221    ctx.lineTo(30, 70);
222    ctx.stroke();
223  }
224}
225```
226
227![zh-cn_image_0000001167001464](figures/zh-cn_image_0000001167001464.png)
228
229
230### font
231
232```html
233<!-- xxx.hml -->
234<div>
235  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
236</div>
237```
238
239```js
240// xxx.js
241export default {
242  onShow() {
243    const el =this.$refs.canvas;
244    const ctx = el.getContext('2d');
245    ctx.font = '30px sans-serif';
246    ctx.fillText("Hello World", 20, 60);
247  }
248}
249```
250
251![zh-cn_image_0000001167046832](figures/zh-cn_image_0000001167046832.png)
252
253
254### textAlign
255
256```html
257<!-- xxx.hml -->
258<div>
259  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
260</div>
261```
262
263```js
264// xxx.js
265export default {
266  onShow() {
267    const el =this.$refs.canvas;
268    const ctx = el.getContext('2d');
269    ctx.strokeStyle = '#0000ff';
270    ctx.moveTo(140, 10);
271    ctx.lineTo(140, 160);
272    ctx.stroke();
273    ctx.font = '18px sans-serif';
274    // Show the different textAlign values
275    ctx.textAlign = 'start';
276    ctx.fillText('textAlign=start', 140, 60);
277    ctx.textAlign = 'end';
278    ctx.fillText('textAlign=end', 140, 80);
279    ctx.textAlign = 'left';
280    ctx.fillText('textAlign=left', 140, 100);
281    ctx.textAlign = 'center';
282    ctx.fillText('textAlign=center',140, 120);
283    ctx.textAlign = 'right';
284    ctx.fillText('textAlign=right',140, 140);
285  }
286}
287
288```
289
290
291![zh-cn_image_0000001167472798](figures/zh-cn_image_0000001167472798.png)
292
293### textBaseline
294
295```html
296<!-- xxx.hml -->
297<div>
298  <canvas ref="canvas" style="width: 500px; height: 500px; "></canvas>
299</div>
300```
301
302```js
303// xxx.js
304export default {
305  onShow() {
306    const el =this.$refs.canvas;
307    const ctx = el.getContext('2d');
308    ctx.strokeStyle = '#0000ff';
309    ctx.moveTo(0, 120);
310    ctx.lineTo(400, 120);
311    ctx.stroke();
312    ctx.font = '20px sans-serif';
313    ctx.textBaseline = 'top';
314    ctx.fillText('Top', 10, 120);
315    ctx.textBaseline = 'bottom';
316    ctx.fillText('Bottom', 55, 120);
317    ctx.textBaseline = 'middle';
318    ctx.fillText('Middle', 125, 120);
319    ctx.textBaseline = 'alphabetic';
320    ctx.fillText('Alphabetic', 195, 120);
321    ctx.textBaseline = 'hanging';
322    ctx.fillText('Hanging', 295, 120);
323  }
324}
325```
326
327![zh-cn_image_0000001169315920](figures/zh-cn_image_0000001169315920.png)
328
329### globalAlpha
330
331```html
332<!-- xxx.hml -->
333<div>
334  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
335</div>
336```
337
338```js
339// xxx.js
340export default {
341  onShow() {
342    const el =this.$refs.canvas;
343    const ctx = el.getContext('2d');
344    ctx.fillStyle = 'rgb(255,0,0)';
345    ctx.fillRect(0, 0, 50, 50);
346    ctx.globalAlpha = 0.4;
347    ctx.fillStyle = 'rgb(0,0,255)';
348    ctx.fillRect(50, 50, 50, 50);
349
350  }
351}
352```
353
354![zh-cn_image_0000001167953648](figures/zh-cn_image_0000001167953648.png)
355
356### lineDashOffset
357
358```html
359<!-- xxx.hml -->
360<div>
361  <canvas ref="canvas" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
362</div>
363```
364
365```js
366// xxx.js
367export default {
368  onShow() {
369    const el =this.$refs.canvas;
370    const ctx = el.getContext('2d');
371    ctx.arc(100, 75, 50, 0, 6.28);
372    ctx.setLineDash([10,20]);
373    ctx.lineDashOffset = 10.0;
374    ctx.stroke();
375  }
376}
377```
378
379![zh-cn_image_0000001167950468](figures/zh-cn_image_0000001167950468.png)
380
381### globalCompositeOperation
382
383类型字段说明
384
385| 值                | 描述                       |
386| ---------------- | ------------------------ |
387| source-over      | 在现有绘制内容上显示新绘制内容,属于默认值。   |
388| source-atop      | 在现有绘制内容顶部显示新绘制内容。        |
389| source-in        | 在现有绘制内容中显示新绘制内容。         |
390| source-out       | 在现有绘制内容之外显示新绘制内容。        |
391| destination-over | 在新绘制内容上方显示现有绘制内容。        |
392| destination-atop | 在新绘制内容顶部显示现有绘制内容。        |
393| destination-in   | 在新绘制内容中显示现有绘制内容。         |
394| destination-out  | 在新绘制内容外显示现有绘制内容。         |
395| lighter          | 显示新绘制内容和现有绘制内容。          |
396| copy             | 显示新绘制内容而忽略现有绘制内容。        |
397| xor              | 使用异或操作对新绘制内容与现有绘制内容进行融合。 |
398
399**示例:**
400
401```html
402<!-- xxx.hml -->
403<div>
404  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
405</div>
406```
407
408  ```js
409// xxx.js
410export default {
411  onShow() {
412    const el =this.$refs.canvas;
413    const ctx = el.getContext('2d');
414    ctx.fillStyle = 'rgb(255,0,0)';
415    ctx.fillRect(20, 20, 50, 50);
416    ctx.globalCompositeOperation = 'source-over';
417    ctx.fillStyle = 'rgb(0,0,255)';
418    ctx.fillRect(50, 50, 50, 50);
419    // Start drawing second example
420    ctx.fillStyle = 'rgb(255,0,0)';
421    ctx.fillRect(120, 20, 50, 50);
422    ctx.globalCompositeOperation = 'destination-over';
423    ctx.fillStyle = 'rgb(0,0,255)';
424    ctx.fillRect(150, 50, 50, 50);
425  }
426}
427  ```
428
429  ![zh-cn_image_0000001213192781](figures/zh-cn_image_0000001213192781.png)
430
431  示例中,新绘制内容是蓝色矩形,现有绘制内容是红色矩形。
432
433### shadowBlur
434
435  ```html
436<!-- xxx.hml -->
437<div>
438  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
439</div>
440  ```
441
442```js
443// xxx.js
444export default {
445  onShow() {
446    const el =this.$refs.canvas;
447    const ctx = el.getContext('2d');
448    ctx.shadowBlur = 30;
449    ctx.shadowColor = 'rgb(0,0,0)';
450    ctx.fillStyle = 'rgb(255,0,0)';
451    ctx.fillRect(20, 20, 100, 80);
452  }
453}
454```
455
456![zh-cn_image_0000001168111514](figures/zh-cn_image_0000001168111514.png)
457
458### shadowColor
459
460```html
461<!-- xxx.hml -->
462<div>
463  <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
464</div>
465```
466
467```js
468// xxx.js
469export default {
470  onShow() {
471    const el =this.$refs.canvas;
472    const ctx = el.getContext('2d');
473    ctx.shadowBlur = 30;
474    ctx.shadowColor = 'rgb(0,0,255)';
475    ctx.fillStyle = 'rgb(255,0,0)';
476    ctx.fillRect(30, 30, 100, 100);
477  }
478}
479```
480
481![zh-cn_image_0000001168111610](figures/zh-cn_image_0000001168111610.png)
482
483### shadowOffsetX
484
485```html
486<!-- xxx.hml -->
487<div>
488  <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
489</div>
490```
491
492```js
493// xxx.js
494export default {
495  onShow() {
496    const el =this.$refs.canvas;
497    const ctx = el.getContext('2d');
498    ctx.shadowBlur = 10;
499    ctx.shadowOffsetX = 20;
500    ctx.shadowColor = 'rgb(0,0,0)';
501    ctx.fillStyle = 'rgb(255,0,0)';
502    ctx.fillRect(20, 20, 100, 80);
503  }
504}
505```
506
507
508![zh-cn_image_0000001167631876](figures/zh-cn_image_0000001167631876.png)
509
510### shadowOffsetY
511
512```html
513<!-- xxx.hml -->
514<div>
515  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
516</div>
517```
518
519```js
520// xxx.js
521export default {
522  onShow() {
523    const el =this.$refs.canvas;
524    const ctx = el.getContext('2d');
525    ctx.shadowBlur = 10;
526    ctx.shadowOffsetY = 20;
527    ctx.shadowColor = 'rgb(0,0,0)';
528    ctx.fillStyle = 'rgb(255,0,0)';
529    ctx.fillRect(30, 30, 100, 100);
530 }
531}
532```
533
534![zh-cn_image_0000001213193285](figures/zh-cn_image_0000001213193285.png)
535
536### imageSmoothingEnabled<sup>6+</sup>
537
538```html
539<!-- xxx.hml -->
540<div>
541  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
542</div>
543```
544
545```js
546// xxx.js
547export default {
548  onShow() {
549    const el =this.$refs.canvas;
550    const ctx = el.getContext('2d');
551    var img = new Image();
552    img.src = 'common/image/example.jpg';
553    img.onload = function() {
554    ctx.imageSmoothingEnabled = false;
555    ctx.drawImage(img, 0, 0, 400, 200);
556    };
557  }
558}
559```
560
561![zh-cn_image_0000001167952236](figures/zh-cn_image_0000001167952236.png)
562
563
564
565## 方法
566
567
568### fillRect
569
570fillRect(x: number, y: number, width:number, height: number): void
571
572填充一个矩形。
573
574**参数:**
575
576| 参数     | 类型     | 描述            |
577| ------ | ------ | ------------- |
578| x      | number | 指定矩形左上角点的x坐标。 |
579| y      | number | 指定矩形左上角点的y坐标。 |
580| width  | number | 指定矩形的宽度。      |
581| height | number | 指定矩形的高度。      |
582
583**示例:**
584
585```html
586  <!-- xxx.hml -->
587  <div>
588    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
589  </div>
590```
591
592  ```js
593  //xxx.js
594  export default {
595    onShow() {
596      const el =this.$refs.canvas;
597      const ctx = el.getContext('2d');
598      ctx.fillRect(20, 20, 200, 150);
599    }
600  }
601  ```
602
603  ![zh-cn_image_0000001214811029](figures/zh-cn_image_0000001214811029.png)
604
605### clearRect
606
607clearRect(x: number, y: number, width:number, height: number): void
608
609删除指定区域内的绘制内容。
610
611**参数:**
612
613| 参数     | 类型     | 描述            |
614| ------ | ------ | ------------- |
615| x      | number | 指定矩形上的左上角x坐标。 |
616| y      | number | 指定矩形上的左上角y坐标。 |
617| width  | number | 指定矩形的宽度。      |
618| height | number | 指定矩形的高度。      |
619
620**示例:**
621  ```html
622  <!-- xxx.hml -->
623  <div>
624    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
625  </div>
626  ```
627
628  ```js
629  //xxx.js
630  export default {
631    onShow() {
632      const el =this.$refs.canvas;
633      const ctx = el.getContext('2d');
634      ctx.fillStyle = 'rgb(0,0,255)';
635      ctx.fillRect(0, 0, 400, 200);
636      ctx.clearRect(20, 20, 150, 100);
637    }
638  }
639  ```
640
641  ![zh-cn_image_0000001214619417](figures/zh-cn_image_0000001214619417.png)
642
643
644### strokeRect
645
646strokeRect(x: number, y: number, width:number, height: number): void
647
648绘制具有边框的矩形,矩形内部不填充。
649
650**参数:**
651
652| 参数     | 类型     | 描述           |
653| ------ | ------ | ------------ |
654| x      | number | 指定矩形的左上角x坐标。 |
655| y      | number | 指定矩形的左上角y坐标。 |
656| width  | number | 指定矩形的宽度。     |
657| height | number | 指定矩形的高度。     |
658
659**示例:**
660  ```html
661  <!-- xxx.hml -->
662  <div>
663    <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
664  </div>
665  ```
666
667  ```js
668  //xxx.js
669  export default {
670    onShow() {
671      const el =this.$refs.canvas;
672      const ctx = el.getContext('2d');
673      ctx.strokeRect(30, 30, 200, 150);
674    }
675  }
676  ```
677
678  ![zh-cn_image_0000001214822091](figures/zh-cn_image_0000001214822091.png)
679
680
681### fillText
682
683fillText(text: string, x: number, y: number): void
684
685绘制填充类文本。
686
687**参数:**
688
689| 参数   | 类型     | 描述              |
690| ---- | ------ | --------------- |
691| text | string | 需要绘制的文本内容。      |
692| x    | number | 需要绘制的文本的左下角x坐标。 |
693| y    | number | 需要绘制的文本的左下角y坐标。 |
694
695**示例:**
696  ```html
697  <!-- xxx.hml -->
698  <div>
699    <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
700  </div>
701  ```
702
703  ```js
704  //xxx.js
705  export default {
706    onShow() {
707      const el =this.$refs.canvas;
708      const ctx = el.getContext('2d');
709      ctx.font = '35px sans-serif';
710      ctx.fillText("Hello World!", 10, 60);
711    }
712  }
713  ```
714
715  ![zh-cn_image_0000001214469787](figures/zh-cn_image_0000001214469787.png)
716
717### strokeText
718
719strokeText(text: string, x: number, y: number): void
720
721绘制描边类文本。
722
723**参数:**
724
725| 参数   | 类型     | 描述              |
726| ---- | ------ | --------------- |
727| text | string | 需要绘制的文本内容。      |
728| x    | number | 需要绘制的文本的左下角x坐标。 |
729| y    | number | 需要绘制的文本的左下角y坐标。 |
730
731**示例:**
732  ```html
733  <!-- xxx.hml -->
734  <div>
735    <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
736  </div>
737  ```
738
739  ```js
740  //xxx.js
741  export default {
742    onShow() {
743      const el =this.$refs.canvas;
744      const ctx = el.getContext('2d');
745      ctx.font = '25px sans-serif';
746      ctx.strokeText("Hello World!", 10, 60);
747    }
748  }
749  ```
750
751  ![zh-cn_image_0000001214460669](figures/zh-cn_image_0000001214460669.png)
752
753### measureText
754
755measureText(text: string): TextMetrics
756
757该方法返回一个文本测算的对象,通过该对象可以获取指定文本的宽度值。
758
759**参数:**
760
761| 参数   | 类型     | 描述         |
762| ---- | ------ | ---------- |
763| text | string | 需要进行测量的文本。 |
764
765**返回值:**
766
767| 类型          | 说明                                     |
768| ----------- | -------------------------------------- |
769| TextMetrics | 包含指定字体的宽度,该宽度可以通过TextMetrics.width来获取。 |
770
771**示例:**
772  ```html
773  <!-- xxx.hml -->
774  <div>
775    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
776  </div>
777  ```
778
779  ```js
780  //xxx.js
781  export default {
782    onShow() {
783      const el =this.$refs.canvas;
784      const ctx = el.getContext('2d');
785      ctx.font = '20px sans-serif';
786      var txt = 'Hello World';
787      ctx.fillText("width:" + ctx.measureText(txt).width, 20, 60);
788      ctx.fillText(txt, 20, 110);
789    }
790  }
791  ```
792
793  ![zh-cn_image_0000001169142476](figures/zh-cn_image_0000001169142476.png)
794
795
796### stroke
797stroke(): void
798
799进行边框绘制操作。
800
801**示例:**
802  ```html
803  <!-- xxx.hml -->
804  <div>
805    <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
806  </div>
807  ```
808
809  ```js
810  //xxx.js
811  export default {
812    onShow() {
813      const el =this.$refs.canvas;
814      const ctx = el.getContext('2d');
815      ctx.moveTo(25, 25);
816      ctx.lineTo(25, 250);
817      ctx.lineWidth = '6';
818      ctx.strokeStyle = 'rgb(0,0,255)';
819      ctx.stroke();
820    }
821  }
822  ```
823
824  ![zh-cn_image_0000001236697937](figures/zh-cn_image_0000001236697937.png)
825
826
827### beginPath
828beginPath(): void
829
830创建一个新的绘制路径。
831
832**示例:**
833  ```html
834  <!-- xxx.hml -->
835  <div>
836    <canvas ref="canvas" style="width: 500px; height: 500px; "></canvas>
837  </div>
838  ```
839
840  ```js
841  //xxx.js
842  export default {
843    onShow() {
844      const el =this.$refs.canvas;
845      const ctx = el.getContext('2d');
846      ctx.beginPath();
847      ctx.lineWidth = '6';
848      ctx.strokeStyle = '#0000ff';
849      ctx.moveTo(15, 80);
850      ctx.lineTo(280, 80);
851      ctx.stroke();
852    }
853  }
854  ```
855
856  ![zh-cn_image_0000001214629745](figures/zh-cn_image_0000001214629745.png)
857
858
859### moveTo
860moveTo(x: number, y: number): void
861
862路径从当前点移动到指定点。
863
864**参数:**
865
866| 参数   | 类型     | 描述                 |
867| ---- | ------ | ------------------ |
868| x    | number | 指定位置的x坐标。<br>单位:vp |
869| y    | number | 指定位置的y坐标。<br>单位:vp |
870
871**示例:**
872  ```html
873  <!-- xxx.hml -->
874  <div>
875    <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
876  </div>
877  ```
878
879  ```js
880  //xxx.js
881  export default {
882    onShow() {
883      const el =this.$refs.canvas;
884      const ctx = el.getContext('2d');
885      ctx.beginPath();
886      ctx.moveTo(10, 10);
887      ctx.lineTo(280, 160);
888      ctx.stroke();
889    }
890  }
891  ```
892
893  ![zh-cn_image_0000001169309948](figures/zh-cn_image_0000001169309948.png)
894
895
896### lineTo
897lineTo(x: number, y: number): void
898
899从当前点到指定点进行路径连接。
900
901**参数:**
902
903| 参数   | 类型     | 描述        |
904| ---- | ------ | --------- |
905| x    | number | 指定位置的x坐标。<br>单位:vp |
906| y    | number | 指定位置的y坐标。<br>单位:vp |
907
908**示例:**
909  ```html
910  <!-- xxx.hml -->
911  <div>
912    <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
913  </div>
914  ```
915
916  ```js
917  //xxx.js
918  export default {
919    onShow() {
920      const el =this.$refs.canvas;
921      const ctx = el.getContext('2d');
922      ctx.beginPath();
923      ctx.moveTo(10, 10);
924      ctx.lineTo(280, 160);
925      ctx.stroke();
926    }
927  }
928  ```
929
930  ![zh-cn_image_0000001169469914](figures/zh-cn_image_0000001169469914.png)
931
932
933### closePath
934closePath(): void
935
936结束当前路径形成一个封闭路径。
937
938**示例:**
939  ```html
940  <!-- xxx.hml -->
941  <div>
942    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
943  </div>
944  ```
945
946  ```js
947  //xxx.js
948  export default {
949    onShow() {
950      const el =this.$refs.canvas;
951      const ctx = el.getContext('2d');
952      ctx.beginPath();
953      ctx.moveTo(30, 30);
954      ctx.lineTo(110, 30);
955      ctx.lineTo(70, 90);
956      ctx.closePath();
957      ctx.stroke();
958    }
959  }
960  ```
961
962  ![zh-cn_image_0000001169151508](figures/zh-cn_image_0000001169151508.png)
963
964### createPattern
965
966createPattern(image: Image, repetition: string): Object
967
968通过指定图像和重复方式创建图片填充的模板。
969
970**参数:**
971
972| 参数         | 类型     | 描述                                       |
973| ---------- | ------ | ---------------------------------------- |
974| image      | Image  | 图源对象,具体参考[Image对象](js-components-canvas-image.md)。 |
975| repetition | string | 设置图像重复的方式,取值为:'repeat'、'repeat-x'、&nbsp;'repeat-y'、'no-repeat'。 |
976
977**返回值:**
978
979| 类型     | 说明                |
980| ------ | ----------------- |
981| Object | 指定图像填充的Pattern对象。 |
982
983**示例:**
984  ```html
985  <!-- xxx.hml -->
986  <div>
987    <canvas ref="canvas" style="width: 1000px; height: 1000px;"></canvas>
988  </div>
989  ```
990
991  ```js
992  //xxx.js
993  export default {
994    onShow() {
995      const el =this.$refs.canvas;
996      const ctx = el.getContext('2d');
997      var img = new Image();
998      img.src = 'common/images/example.jpg';
999      var pat = ctx.createPattern(img, 'repeat');
1000      ctx.fillStyle = pat;
1001      ctx.fillRect(0, 0, 500, 500);
1002    }
1003  }
1004  ```
1005
1006  ![zh-cn_image_0000001169301188](figures/zh-cn_image_0000001169301188.png)
1007
1008### bezierCurveTo
1009
1010bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void
1011
1012创建三次贝赛尔曲线的路径。
1013
1014**参数:**
1015
1016| 参数   | 类型     | 描述             |
1017| ---- | ------ | -------------- |
1018| cp1x | number | 第一个贝塞尔参数的x坐标值。 |
1019| cp1y | number | 第一个贝塞尔参数的y坐标值。 |
1020| cp2x | number | 第二个贝塞尔参数的x坐标值。 |
1021| cp2y | number | 第二个贝塞尔参数的y坐标值。 |
1022| x    | number | 路径结束时的x坐标值。    |
1023| y    | number | 路径结束时的y坐标值。    |
1024
1025**示例:**
1026  ```html
1027  <!-- xxx.hml -->
1028  <div>
1029    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1030  </div>
1031  ```
1032
1033  ```js
1034  //xxx.js
1035  export default {
1036    onShow() {
1037      const el =this.$refs.canvas;
1038      const ctx = el.getContext('2d');
1039      ctx.beginPath();
1040      ctx.moveTo(10, 10);
1041      ctx.bezierCurveTo(20, 100, 200, 100, 200, 20);
1042      ctx.stroke();
1043    }
1044  }
1045  ```
1046
1047  ![zh-cn_image_0000001214621177](figures/zh-cn_image_0000001214621177.png)
1048
1049### quadraticCurveTo
1050
1051quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void
1052
1053创建二次贝赛尔曲线的路径。
1054
1055**参数:**
1056
1057| 参数   | 类型     | 描述          |
1058| ---- | ------ | ----------- |
1059| cpx  | number | 贝塞尔参数的x坐标值。 |
1060| cpy  | number | 贝塞尔参数的y坐标值。 |
1061| x    | number | 路径结束时的x坐标值。 |
1062| y    | number | 路径结束时的y坐标值。 |
1063
1064**示例:**
1065  ```html
1066  <!-- xxx.hml -->
1067  <div>
1068    <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
1069  </div>
1070  ```
1071
1072  ```js
1073  //xxx.js
1074  export default {
1075    onShow() {
1076      const el =this.$refs.canvas;
1077      const ctx = el.getContext('2d');
1078      ctx.beginPath();
1079      ctx.moveTo(20, 20);
1080      ctx.quadraticCurveTo(100, 100, 200, 20);
1081      ctx.stroke();
1082    }
1083  }
1084  ```
1085
1086  ![zh-cn_image_0000001169461910](figures/zh-cn_image_0000001169461910.png)
1087
1088
1089### arc
1090arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise: boolean): void
1091
1092绘制弧线路径。
1093
1094**参数:**
1095
1096| 参数            | 类型      | 描述         |
1097| ------------- | ------- | ---------- |
1098| x             | number  | 弧线圆心的x坐标值。 |
1099| y             | number  | 弧线圆心的y坐标值。 |
1100| radius        | number  | 弧线的圆半径。    |
1101| startAngle    | number  | 弧线的起始弧度。   |
1102| endAngle      | number  | 弧线的终止弧度。   |
1103| anticlockwise | boolean | 是否逆时针绘制圆弧。 |
1104
1105**示例:**
1106  ```html
1107  <!-- xxx.hml -->
1108  <div>
1109    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1110  </div>
1111  ```
1112
1113  ```js
1114  //xxx.js
1115  export default {
1116    onShow() {
1117      const el =this.$refs.canvas;
1118      const ctx = el.getContext('2d');
1119      ctx.beginPath();
1120      ctx.arc(100, 75, 50, 0, 6.28);
1121      ctx.stroke();
1122    }
1123  }
1124  ```
1125
1126  ![zh-cn_image_0000001169470288](figures/zh-cn_image_0000001169470288.png)
1127
1128### arcTo
1129
1130arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void
1131
1132依据圆弧经过的点和圆弧半径创建圆弧路径。
1133
1134**参数:**
1135
1136| 参数     | 类型     | 描述              |
1137| ------ | ------ | --------------- |
1138| x1     | number | 圆弧经过的第一个点的x坐标值。 |
1139| y1     | number | 圆弧经过的第一个点的y坐标值。 |
1140| x2     | number | 圆弧经过的第二个点的x坐标值。 |
1141| y2     | number | 圆弧经过的第二个点的y坐标值。 |
1142| radius | number | 圆弧的圆半径值。        |
1143
1144**示例:**
1145  ```html
1146  <!-- xxx.hml -->
1147  <div>
1148    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1149  </div>
1150  ```
1151
1152  ```js
1153  //xxx.js
1154  export default {
1155    onShow() {
1156      const el =this.$refs.canvas;
1157      const ctx = el.getContext('2d');
1158      ctx.moveTo(100, 20);
1159      ctx.arcTo(150, 20, 150, 70, 50); // Create an arc
1160      ctx.stroke();
1161    }
1162  }
1163  ```
1164
1165  ![zh-cn_image_0000001169143586](figures/zh-cn_image_0000001169143586.png)
1166
1167### ellipse<sup>6+</sup>
1168
1169ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise: number): void
1170
1171在规定的矩形区域绘制一个椭圆。
1172
1173**参数:**
1174
1175| 参数            | 类型     | 描述                                   |
1176| ------------- | ------ | ------------------------------------ |
1177| x             | number | 椭圆圆心的x轴坐标。                           |
1178| y             | number | 椭圆圆心的y轴坐标。                           |
1179| radiusX       | number | 椭圆x轴的半径长度。                           |
1180| radiusY       | number | 椭圆y轴的半径长度。                           |
1181| rotation      | number | 椭圆的旋转角度,单位为弧度。                       |
1182| startAngle    | number | 椭圆绘制的起始点角度,以弧度表示。                    |
1183| endAngle      | number | 椭圆绘制的结束点角度,以弧度表示。                    |
1184| anticlockwise | number | 是否以逆时针方向绘制椭圆,0为顺时针,1为逆时针。(可选参数,默认为0) |
1185
1186**示例:**
1187  ```html
1188  <!-- xxx.hml -->
1189  <div>
1190    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
1191  </div>
1192  ```
1193
1194  ```js
1195  //xxx.js
1196  export default {
1197    onShow() {
1198      const el =this.$refs.canvas;
1199      const ctx = el.getContext('2d');
1200      ctx.beginPath();
1201      ctx.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI, 1);
1202      ctx.stroke();
1203    }
1204  }
1205  ```
1206
1207  ![zh-cn_image_0000001214823665](figures/zh-cn_image_0000001214823665.png)
1208
1209
1210### rect
1211rect(x: number, y: number, width: number, height: number): void
1212
1213创建矩形路径。
1214
1215**参数:**
1216
1217| 参数     | 类型     | 描述            |
1218| ------ | ------ | ------------- |
1219| x      | number | 指定矩形的左上角x坐标值。 |
1220| y      | number | 指定矩形的左上角y坐标值。 |
1221| width  | number | 指定矩形的宽度。      |
1222| height | number | 指定矩形的高度。      |
1223
1224**示例:**
1225  ```html
1226  <!-- xxx.hml -->
1227  <div>
1228    <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
1229  </div>
1230  ```
1231
1232  ```js
1233  //xxx.js
1234  export default {
1235    onShow() {
1236      const el =this.$refs.canvas;
1237      const ctx = el.getContext('2d');
1238      ctx.rect(20, 20, 100, 100); // Create a 100*100 rectangle at (20, 20)
1239      ctx.stroke(); // Draw it
1240    }
1241  }
1242  ```
1243
1244  ![zh-cn_image_0000001214630783](figures/zh-cn_image_0000001214630783.png)
1245
1246### fill
1247
1248fill(): void
1249
1250对封闭路径进行填充。
1251
1252**示例:**
1253  ```html
1254  <!-- xxx.hml -->
1255  <div>
1256    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1257  </div>
1258  ```
1259
1260  ```js
1261  //xxx.js
1262  export default {
1263    onShow() {
1264      const el =this.$refs.canvas;
1265      const ctx = el.getContext('2d');
1266      ctx.rect(20, 20, 100, 100); // Create a 100*100 rectangle at (20, 20)
1267      ctx.fill(); // Draw it in default setting
1268    }
1269  }
1270  ```
1271
1272  ![zh-cn_image_0000001214703717](figures/zh-cn_image_0000001214703717.png)
1273
1274### clip
1275
1276clip(): void
1277
1278设置当前路径为剪切路径。
1279
1280**示例:**
1281  ```html
1282  <!-- xxx.hml -->
1283  <div>
1284    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1285  </div>
1286  ```
1287
1288  ```js
1289  //xxx.js
1290  export default {
1291    onShow() {
1292      const el =this.$refs.canvas;
1293      const ctx = el.getContext('2d');
1294      ctx.rect(0, 0, 200, 200);
1295      ctx.stroke();
1296      ctx.clip();
1297      // Draw red rectangle after clip
1298      ctx.fillStyle = "rgb(255,0,0)";
1299      ctx.fillRect(0, 0, 150, 150);
1300    }
1301  }
1302  ```
1303
1304  ![zh-cn_image_0000001169303414](figures/zh-cn_image_0000001169303414.png)
1305
1306### rotate
1307
1308rotate(rotate: number): void
1309
1310针对当前坐标轴进行顺时针旋转。
1311
1312**参数:**
1313
1314| 参数     | 类型     | 描述                                       |
1315| ------ | ------ | ---------------------------------------- |
1316| rotate | number | 设置顺时针旋转的弧度值,可以通过Math.PI&nbsp;/&nbsp;180将角度转换为弧度值。 |
1317
1318**示例:**
1319  ```html
1320  <!-- xxx.hml -->
1321  <div>
1322    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1323  </div>
1324  ```
1325
1326  ```js
1327  //xxx.js
1328  export default {
1329    onShow() {
1330      const el =this.$refs.canvas;
1331      const ctx = el.getContext('2d');
1332      ctx.rotate(45 * Math.PI / 180); // Rotate the rectangle 45 degrees
1333      ctx.fillRect(70, 20, 50, 50);
1334    }
1335  }
1336  ```
1337
1338  ![zh-cn_image_0000001169463368](figures/zh-cn_image_0000001169463368.png)
1339
1340### scale
1341
1342scale(x: number, y: number): void
1343
1344设置canvas画布的缩放变换属性,后续的绘制操作将按照缩放比例进行缩放。
1345
1346**参数:**
1347
1348| 参数   | 类型     | 描述          |
1349| ---- | ------ | ----------- |
1350| x    | number | 设置水平方向的缩放值。 |
1351| y    | number | 设置垂直方向的缩放值。 |
1352
1353**示例:**
1354  ```html
1355  <!-- xxx.hml -->
1356  <div>
1357    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1358  </div>
1359  ```
1360
1361  ```js
1362  //xxx.js
1363  export default {
1364    onShow() {
1365      const el =this.$refs.canvas;
1366      const ctx = el.getContext('2d');
1367      ctx.strokeRect(10, 10, 25, 25);
1368      ctx.scale(2, 2);// Scale to 200%
1369      ctx.strokeRect(10, 10, 25, 25);
1370    }
1371  }
1372  ```
1373
1374  ![zh-cn_image_0000001214463281](figures/zh-cn_image_0000001214463281.png)
1375
1376### transform
1377
1378transform(scaleX: number, skewX: number, skewY: number, scale: number, translateX: number, translateY: number): void
1379
1380transform方法对应一个变换矩阵,想对一个图形进行变化的时候,只要设置此变换矩阵相应的参数,对图形的各个定点的坐标分别乘以这个矩阵,就能得到新的定点的坐标。矩阵变换效果可叠加。
1381
1382>  **说明:**
1383>  变换后的坐标计算方式(x和y为变换前坐标,x'和y'为变换后坐标):
1384>
1385>  - x' = scaleX \* x + skewY \* y + translateX
1386>
1387>  - y' = skewX \* x + scaleY \* y + translateY
1388
1389**参数:**
1390
1391| 参数         | 类型     | 描述       |
1392| ---------- | ------ | -------- |
1393| scaleX     | number | 指定水平缩放值。 |
1394| skewX      | number | 指定水平倾斜值。 |
1395| skewY      | number | 指定垂直倾斜值。 |
1396| scaleY     | number | 指定垂直缩放值。 |
1397| translateX | number | 指定水平移动值。 |
1398| translateY | number | 指定垂直移动值。 |
1399
1400**示例:**
1401  ```html
1402  <!-- xxx.hml -->
1403  <div>
1404    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1405  </div>
1406  ```
1407
1408  ```js
1409  //xxx.js
1410  export default {
1411    onShow() {
1412      const el =this.$refs.canvas;
1413      const ctx = el.getContext('2d');
1414      ctx.fillStyle = 'rgb(0,0,0)';
1415      ctx.fillRect(0, 0, 100, 100)
1416      ctx.transform(1, 0.5, -0.5, 1, 10, 10);
1417      ctx.fillStyle = 'rgb(255,0,0)';
1418      ctx.fillRect(0, 0, 100, 100);
1419      ctx.transform(1, 0.5, -0.5, 1, 10, 10);
1420      ctx.fillStyle = 'rgb(0,0,255)';
1421      ctx.fillRect(0, 0, 100, 100);
1422    }
1423  }
1424  ```
1425
1426  ![zh-cn_image_0000001214623227](figures/zh-cn_image_0000001214623227.png)
1427
1428### setTransform
1429
1430setTransform(scaleX: number, skewX: number, skewY: number, scale: number, translateX: number, translateY: number): void
1431
1432setTransform方法使用的参数和transform()方法相同,但setTransform()方法会重置现有的变换矩阵并创建新的变换矩阵。
1433
1434**参数:**
1435
1436| 参数         | 类型     | 描述       |
1437| ---------- | ------ | -------- |
1438| scaleX     | number | 指定水平缩放值。 |
1439| skewX      | number | 指定水平倾斜值。 |
1440| skewY      | number | 指定垂直倾斜值。 |
1441| scaleY     | number | 指定垂直缩放值。 |
1442| translateX | number | 指定水平移动值。 |
1443| translateY | number | 指定垂直移动值。 |
1444
1445**示例:**
1446  ```html
1447  <!-- xxx.hml -->
1448  <div>
1449    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1450  </div>
1451  ```
1452
1453  ```js
1454  //xxx.js
1455  export default {
1456    onShow() {
1457      const el =this.$refs.canvas;
1458      const ctx = el.getContext('2d');
1459      ctx.fillStyle = 'rgb(255,0,0)';
1460      ctx.fillRect(0, 0, 100, 100)
1461      ctx.setTransform(1,0.5, -0.5, 1, 10, 10);
1462      ctx.fillStyle = 'rgb(0,0,255)';
1463      ctx.fillRect(0, 0, 100, 100);
1464    }
1465  }
1466  ```
1467
1468  ![zh-cn_image_0000001168984880](figures/zh-cn_image_0000001168984880.png)
1469
1470### translate
1471
1472translate(x: number, y: number): void
1473
1474移动当前坐标系的原点。
1475
1476**参数:**
1477
1478| 参数   | 类型     | 描述       |
1479| ---- | ------ | -------- |
1480| x    | number | 设置水平平移量。 |
1481| y    | number | 设置竖直平移量。 |
1482
1483**示例:**
1484  ```html
1485  <!-- xxx.hml -->
1486  <div>
1487    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1488  </div>
1489  ```
1490
1491  ```js
1492  //xxx.js
1493  export default {
1494    onShow() {
1495      const el =this.$refs.canvas;
1496      const ctx = el.getContext('2d');
1497      ctx.fillRect(10, 10, 50, 50);
1498      ctx.translate(70, 70);
1499      ctx.fillRect(10, 10, 50, 50);
1500    }
1501  }
1502  ```
1503
1504  ![zh-cn_image_0000001169144864](figures/zh-cn_image_0000001169144864.png)
1505
1506### createPath2D<sup>6+</sup>
1507
1508createPath2D(path: Path2D, cmds: string): Path2D
1509
1510创建一个Path2D对象。
1511
1512**参数:**
1513
1514| 参数   | 类型     | 描述             |
1515| ---- | ------ | -------------- |
1516| path | Path2D | Path2D对象。      |
1517| cmds | string | SVG的Path描述字符串。 |
1518
1519**返回值:**
1520
1521  [Path2D对象](js-components-canvas-path2d.md)
1522
1523**示例:**
1524  ```html
1525  <!-- xxx.hml -->
1526  <div>
1527    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
1528  </div>
1529  ```
1530
1531  ```js
1532  //xxx.js
1533  export default {
1534    onShow() {
1535      const el =this.$refs.canvas;
1536      const ctx = el.getContext('2d');
1537      var path1 = ctx.createPath2D();
1538      path1.moveTo(100, 100);
1539      path1.lineTo(200, 100);
1540      path1.lineTo(100, 200);
1541      path1.closePath();
1542      ctx.stroke(path1);
1543      var path2 = ctx.createPath2D("M150 150 L50 250 L250 250 Z");
1544      ctx.stroke(path2);
1545      var path3 = ctx.createPath2D(path2);
1546      ctx.stroke(path3);
1547    }
1548  }
1549  ```
1550
1551  ![zh-cn_image_0000001214824709](figures/zh-cn_image_0000001214824709.png)
1552
1553### drawImage
1554
1555drawImage(image: Image | PixelMap, sx: number, sy: number, sWidth: number, sHeight: number, dx: number, dy: number, dWidth: number, dHeight: number):void
1556
1557进行图像绘制。
1558
1559**参数:**
1560
1561| 参数      | 类型                             | 描述                                       |
1562| ------- | ------------------------------ | ---------------------------------------- |
1563| image   | Image \| PixelMap<sup>9+</sup> | 图片资源,请参考[Image对象](js-components-canvas-image.md) 或[PixelMap对象](../../apis-image-kit/js-apis-image.md#pixelmap7)。 |
1564| sx      | number                         | 裁切源图像时距离源图像左上角的x坐标值。                     |
1565| sy      | number                         | 裁切源图像时距离源图像左上角的y坐标值。                     |
1566| sWidth  | number                         | 裁切源图像时需要裁切的宽度。                           |
1567| sHeight | number                         | 裁切源图像时需要裁切的高度。                           |
1568| dx      | number                         | 绘制区域左上角在x轴的位置。                           |
1569| dy      | number                         | 绘制区域左上角在y&nbsp;轴的位置。                     |
1570| dWidth  | number                         | 绘制区域的宽度。                                 |
1571| dHeight | number                         | 绘制区域的高度。                                 |
1572
1573**示例:**
1574  ```html
1575  <!-- xxx.hml -->
1576  <div>
1577    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
1578  </div>
1579  ```
1580
1581  ```js
1582  //xxx.js
1583  export default {
1584    onShow() {
1585      var test = this.$refs.canvas;
1586      var ctx = test.getContext('2d');
1587      var img = new Image();
1588      img.src = 'common/image/test.jpg';
1589      ctx.drawImage(img, 0, 0, 200, 200, 10, 10, 200, 200);
1590    }
1591  }
1592  ```
1593
1594  ![zh-cn_image_0000001214704759](figures/zh-cn_image_0000001214704759.png)
1595
1596### restore
1597
1598restore(): void
1599
1600对保存的绘图上下文进行恢复。
1601
1602**示例:**
1603  ```html
1604  <!-- xxx.hml -->
1605  <div>
1606    <canvas ref="canvas" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
1607  </div>
1608  ```
1609
1610  ```js
1611  //xxx.js
1612  export default {
1613    onShow() {
1614      const el =this.$refs.canvas;
1615      const ctx = el.getContext('2d');
1616      ctx.restore();
1617    }
1618  }
1619  ```
1620
1621### save
1622
1623save(): void
1624
1625对当前的绘图上下文进行保存。
1626
1627**示例:**
1628  ```html
1629  <!-- xxx.hml -->
1630  <div>
1631    <canvas ref="canvas" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
1632  </div>
1633  ```
1634
1635  ```js
1636  //xxx.js
1637  export default {
1638    onShow() {
1639      const el =this.$refs.canvas;
1640      const ctx = el.getContext('2d');
1641      ctx.save();
1642    }
1643  }
1644  ```
1645
1646### createLinearGradient<sup>6+</sup>
1647
1648createLinearGradient(x0: number, y0: number, x1: number, y1: number): Object
1649
1650创建一个线性渐变色,返回CanvasGradient对象,请参考[CanvasGradient对象](js-components-canvas-canvasgradient.md)。
1651
1652**参数:**
1653
1654| 参数   | 类型     | 描述       |
1655| ---- | ------ | -------- |
1656| x0   | number | 起点的x轴坐标。 |
1657| y0   | number | 起点的y轴坐标。 |
1658| x1   | number | 终点的x轴坐标。 |
1659| y1   | number | 终点的y轴坐标。 |
1660
1661**返回值:**
1662
1663| 类型     | 说明                     |
1664| ------ | ---------------------- |
1665| Object | 返回创建的CanvasGradient对象。 |
1666
1667**示例:**
1668  ```html
1669  <!-- xxx.hml -->
1670  <div>
1671    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
1672    <input type="button" style="width: 180px; height: 60px;" value="fillStyle" onclick="handleClick" />
1673  </div>
1674  ```
1675
1676  ```js
1677  // xxx.js
1678  export default {
1679    handleClick() {
1680      const el = this.$refs.canvas;
1681      const ctx = el.getContext('2d');
1682      // Linear gradient: start(50,0) end(300,100)
1683      var gradient = ctx.createLinearGradient(50,0, 300,100);
1684      // Add three color stops
1685      gradient.addColorStop(0.0, '#ff0000');
1686      gradient.addColorStop(0.5, '#ffffff');
1687      gradient.addColorStop(1.0, '#00ff00');
1688      // Set the fill style and draw a rectangle
1689      ctx.fillStyle = gradient;
1690      ctx.fillRect(0, 0, 500, 500);
1691    }
1692  }
1693  ```
1694
1695  ![zh-cn_image_0000001169303416](figures/zh-cn_image_0000001169303416.png)
1696
1697### createRadialGradient<sup>6+</sup>
1698
1699createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): Object
1700
1701创建一个径向渐变色,返回CanvasGradient对象,请参考CanvasGradient
1702
1703**参数:**
1704
1705| 参数   | 类型     | 描述                |
1706| ---- | ------ | ----------------- |
1707| x0   | number | 起始圆的x轴坐标。         |
1708| y0   | number | 起始圆的y轴坐标。         |
1709| r0   | number | 起始圆的半径。必须是非负且有限的。 |
1710| x1   | number | 终点圆的x轴坐标。         |
1711| y1   | number | 终点圆的y轴坐标。         |
1712| r1   | number | 终点圆的半径。必须为非负且有限的。 |
1713
1714**返回值:**
1715
1716| 类型     | 说明                     |
1717| ------ | ---------------------- |
1718| Object | 返回创建的CanvasGradient对象。 |
1719
1720**示例:**
1721  ```html
1722  <!-- xxx.hml -->
1723  <div>
1724    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
1725    <input type="button" style="width: 180px; height: 60px;" value="fillStyle" onclick="handleClick" />
1726  </div>
1727  ```
1728
1729  ```js
1730  // xxx.js
1731  export default {
1732    handleClick() {
1733      const el = this.$refs.canvas;
1734      const ctx = el.getContext('2d');
1735      // Radial gradient: inner circle(200,200,r:50) outer circle(200,200,r:200)
1736      var gradient = ctx.createRadialGradient(200,200,50, 200,200,200);
1737      // Add three color stops
1738      gradient.addColorStop(0.0, '#ff0000');
1739      gradient.addColorStop(0.5, '#ffffff');
1740      gradient.addColorStop(1.0, '#00ff00');
1741      // Set the fill style and draw a rectangle
1742      ctx.fillStyle = gradient;
1743      ctx.fillRect(0, 0, 500, 500);
1744    }
1745  }
1746  ```
1747
1748  ![zh-cn_image_0000001169463370](figures/zh-cn_image_0000001169463370.png)
1749
1750### createImageData
1751
1752createImageData(width: number, height: number, imageData: Object): Object
1753
1754创建新的ImageData 对象,请参考[ImageData对象](js-components-canvas-imagedata.md)。
1755
1756**参数:**
1757
1758| 参数        | 类型     | 描述                |
1759| --------- | ------ | ----------------- |
1760| width     | number | ImageData的宽度。     |
1761| height    | number | ImageData的高度。     |
1762| imagedata | Object | 复制现有的ImageData对象。 |
1763
1764**返回值:**
1765
1766| 类型     | 说明                |
1767| ------ | ----------------- |
1768| Object | 返回创建的ImageData对象。 |
1769
1770**示例:**
1771  ```html
1772  <!-- xxx.hml -->
1773  <div>
1774    <canvas ref="canvas" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
1775  </div>
1776  ```
1777
1778  ```js
1779  //xxx.js
1780  export default {
1781    onShow() {
1782      const el =this.$refs.canvas;
1783      const ctx = el.getContext('2d');
1784      var imageData = ctx.createImageData(50, 100);  // Create ImageData with 50px width and 100px height
1785      var newImageData = ctx.createImageData(imageData);  // Create ImageData using the input imageData
1786    }
1787  }
1788  ```
1789
1790### getImageData
1791
1792getImageData(sx: number, sy: number, sw: number, sh: number): Object
1793
1794以当前canvas指定区域内的像素创建ImageData对象。
1795
1796**参数:**
1797
1798| 参数   | 类型     | 描述              |
1799| ---- | ------ | --------------- |
1800| sx   | number | 需要输出的区域的左上角x坐标。 |
1801| sy   | number | 需要输出的区域的左上角y坐标。 |
1802| sw   | number | 需要输出的区域的宽度。     |
1803| sh   | number | 需要输出的区域的高度。     |
1804
1805**返回值:**
1806
1807| 类型     | 说明                      |
1808| ------ | ----------------------- |
1809| Object | 返回包含指定区域像素的ImageData对象。 |
1810
1811**示例:**
1812  ```html
1813  <!-- xxx.hml -->
1814  <div>
1815    <canvas id="getImageData" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
1816  </div>
1817  ```
1818
1819  ```js
1820  //xxx.js
1821  export default {
1822    onShow() {
1823      const test = this.$element('getImageData')
1824      const ctx = test.getContext('2d');
1825      var imageData = ctx.getImageData(0, 0, 280, 300);
1826    }
1827  }
1828  ```
1829
1830### putImageData
1831
1832putImageData(imageData: Object, dx: number, dy: number, dirtyX: number, dirtyY: number, dirtyWidth: number, dirtyHeight: number): void
1833
1834使用ImageData数据填充新的矩形区域。
1835
1836**参数:**
1837
1838| 参数          | 类型     | 描述                            |
1839| ----------- | ------ | ----------------------------- |
1840| imagedata   | Object | 包含像素值的ImageData对象。            |
1841| dx          | number | 填充区域在x轴方向的偏移量。                |
1842| dy          | number | 填充区域在y轴方向的偏移量。                |
1843| dirtyX      | number | 源图像数据矩形裁切范围左上角距离源图像左上角的x轴偏移量。 |
1844| dirtyY      | number | 源图像数据矩形裁切范围左上角距离源图像左上角的y轴偏移量。 |
1845| dirtyWidth  | number | 源图像数据矩形裁切范围的宽度。               |
1846| dirtyHeight | number | 源图像数据矩形裁切范围的高度。               |
1847
1848**示例:**
1849  ```html
1850  <!-- xxx.hml -->
1851  <div>
1852    <canvas id="getImageData" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
1853  </div>
1854  ```
1855
1856  ```js
1857  //xxx.js
1858  export default {
1859    onShow() {
1860      const test = this.$element('getImageData')
1861      const ctx = test.getContext('2d');
1862      var imgData = ctx.createImageData(100, 100);
1863      for (var i = 0; i < imgData.data.length; i += 4) {
1864        imgData.data[i + 0] = 255;
1865        imgData.data[i + 1] = 0;
1866        imgData.data[i + 2] = 0;
1867        imgData.data[i + 3] = 255;
1868    }
1869      ctx.putImageData(imgData, 10, 10);
1870    }
1871  }
1872  ```
1873
1874  ![zh-cn_image_0000001214463283](figures/zh-cn_image_0000001214463283.png)
1875
1876### getPixelMap<sup>9+</sup>
1877
1878getPixelMap(sx: number, sy: number, sw: number, sh: number): PixelMap
1879
1880获取用当前canvas指定区域内的像素创建的PixelMap对象。
1881
1882**参数:**
1883
1884| 参数   | 类型     | 描述           |
1885| ---- | ------ | ------------ |
1886| sx   | number | 指定区域的左上角x坐标。 |
1887| sy   | number | 指定区域的左上角y坐标。 |
1888| sw   | number | 指定区域的宽度。     |
1889| sh   | number | 指定区域的高度。     |
1890
1891**返回值:**
1892
1893| 类型                                       | 说明                     |
1894| ---------------------------------------- | ---------------------- |
1895| [PixelMap](../../apis-image-kit/js-apis-image.md#pixelmap7) | 返回包含指定区域像素的PixelMap对象。 |
1896
1897**示例:**
1898
1899  ```html
1900  <!-- xxx.hml -->
1901  <div>
1902    <canvas id="canvasId" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
1903  </div>
1904  ```
1905
1906  ```js
1907  //xxx.js
1908  export default {
1909    onShow() {
1910      const test = this.$element('canvasId')
1911      const ctx = test.getContext('2d');
1912      var pixelMap = ctx.getPixelMap(0, 0, 280, 300);
1913    }
1914  }
1915  ```
1916
1917### setLineDash
1918
1919setLineDash(segments: Array): void
1920
1921设置画布的虚线样式。
1922
1923**参数:**
1924
1925| 参数       | 类型    | 描述                   |
1926| -------- | ----- | -------------------- |
1927| segments | Array | 作为数组用来描述线段如何交替和间距长度。 |
1928
1929**示例:**
1930  ```html
1931  <!-- xxx.hml -->
1932  <div>
1933    <canvas ref="canvas" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
1934  </div>
1935  ```
1936
1937  ```js
1938  //xxx.js
1939  export default {
1940    onShow() {
1941      const el =this.$refs.canvas;
1942      const ctx = el.getContext('2d');
1943      ctx.arc(100, 75, 50, 0, 6.28);
1944      ctx.setLineDash([10,20]);
1945      ctx.stroke();
1946    }
1947  }
1948  ```
1949
1950  ![zh-cn_image_0000001214623229](figures/zh-cn_image_0000001214623229.png)
1951
1952### getLineDash
1953
1954getLineDash(): Array
1955
1956获得当前画布的虚线样式。
1957
1958**返回值:**
1959
1960| 类型    | 说明                       |
1961| ----- | ------------------------ |
1962| Array | 返回数组,该数组用来描述线段如何交替和间距长度。 |
1963
1964**示例:**
1965  ```html
1966  <!-- xxx.hml -->
1967  <div>
1968    <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
1969  </div>
1970  ```
1971
1972  ```js
1973  //xxx.js
1974  export default {
1975    onShow() {
1976      const el =this.$refs.canvas;
1977      const ctx = el.getContext('2d');
1978      var info = ctx.getLineDash();
1979    }
1980  }
1981  ```
1982
1983### transferFromImageBitmap<sup>7+</sup>
1984
1985transferFromImageBitmap(bitmap: ImageBitmap): void
1986
1987显示给定的ImageBitmap对象。
1988
1989**参数:**
1990
1991| 参数     | 类型          | 描述                 |
1992| ------ | ----------- | ------------------ |
1993| bitmap | ImageBitmap | 待显示的ImageBitmap对象。 |
1994
1995**示例:**
1996  ```html
1997  <!-- xxx.hml -->
1998  <div>
1999    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
2000  </div>
2001  ```
2002
2003  ```js
2004  //xxx.js
2005  export default {
2006    onShow() {
2007      const el =this.$refs.canvas;
2008      const ctx = el.getContext('2d');
2009      var canvas = this.$refs.canvas.getContext('2d');
2010      var offscreen = new OffscreenCanvas(500,500);
2011      var offscreenCanvasCtx = offscreen.getContext("2d");
2012      offscreenCanvasCtx.fillRect(0, 0, 200, 200);
2013
2014      var bitmap = offscreen.transferToImageBitmap();
2015      canvas.transferFromImageBitmap(bitmap);
2016    }
2017  }
2018  ```
2019
2020  ![zh-cn_image_0000001168984882](figures/zh-cn_image_0000001168984882.png)