Canvas--文字渲染

Posted 穿山甲到底说了什么

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Canvas--文字渲染相关的知识,希望对你有一定的参考价值。

1、使用font属性设置文字的样式属性。默认值为:20px sans-serif

  font 属性使用的语法与 CSS font 属性 相同。

  context.font = \'font-style font-variant font-weight font-size font-family\'

    font-style : normal (默认) || italic (斜体字) || oblique (倾斜字体)

    font-variant : normal (默认) || small-caps (将小写英文字母转换为和小写字母一样大小的大写字母)

    font-weight : lighter || normal ||bold || bolder || 100~900

    font-size : 20px (默认)

    font-family : 可以设置多种备选字体,支持@font-face

2、fillText(text,x,y,[maxWidth])strokeText(text,x,y,[maxWidth])

  text----在画布上输出的文本。

   x  ----开始绘制文本的 x 坐标位置。

   y  ----开始绘制文本的 y 坐标位置。

  [maxwidth]----可选。允许的最大文本宽度,单位:像素。

 1 // 第一行
 2 const grd = context.createLinearGradient(50,50,60,50)
 3 grd.addColorStop(0,\'#a1c4fd\')
 4 grd.addColorStop(1,\'#c2e9fb\')
 5 
 6 context.beginPath()
 7 context.fillStyle = grd
 8 context.font = \'bold 50px Arial\'
 9 context.fillText(\'Hello\',50,50)
10 
11 // 第二行
12 context.beginPath()
13 context.lineWidth = 1
14 context.strokeStyle = \'#0091db\'
15 context.font = \'bold 50px Arial\'
16 context.strokeText(\'Hello\',50,100)
17 
18 // 第三行
19 context.beginPath()
20 context.lineWidth = 1
21 context.strokeStyle = \'#0091db\'
22 context.font = \'bold 50px Arial\'
23 context.strokeText(\'Hello\',50,150,100)
24 
25 // 第四行
26 const IMAGE = new Image();
27 IMAGE.src = \'wood.jpg\';
28 IMAGE.onload = function() {
29   var pattern = context.createPattern(IMAGE, \'repeat\');
30   context.beginPath()
31   context.fillStyle = pattern;
32   context.font = \'bold 50px Arial\'
33   context.fillText(\'Hello\',50,200)
34 }
35 
36 // 第五行
37 const IMAGE1 = new Image();
38 IMAGE1.src = \'wood.jpg\';
39 IMAGE1.onload = function() {
40   var pattern = context.createPattern(IMAGE1, \'repeat\');
41   context.beginPath()
42   context.fillStyle = pattern;
43   context.strokeStyle = \'#0091db\'
44   context.font = \'bold 50px Arial\'
45   context.fillText(\'Hello\',50,250)
46   context.strokeText(\'Hello\',50,250)
47 }

3、文本对齐

  水平方向对齐:

  context.textAlign = left || center || right

  文本对齐的基准为给定的初始坐标值。

 1 // 第一行
 2 const grd = context.createLinearGradient(50,50,60,50)
 3 grd.addColorStop(0,\'#a1c4fd\')
 4 grd.addColorStop(1,\'#c2e9fb\')
 5 
 6 context.beginPath()
 7 context.fillStyle = grd
 8 context.textAlign = \'left\'
 9 context.font = \'bold 50px Arial\'
10 context.fillText(\'Left\',150,50)
11 
12 // 第二行
13 context.beginPath()
14 context.lineWidth = 1
15 context.strokeStyle = \'#0091db\'
16 context.textAlign = \'center\'
17 context.font = \'bold 50px Arial\'
18 context.strokeText(\'Center\',150,100)
19 
20 // 第三行
21 const IMAGE = new Image();
22 IMAGE.src = \'wood.jpg\';
23 IMAGE.onload = function() {
24   var pattern = context.createPattern(IMAGE, \'repeat\');
25   context.beginPath()
26   context.fillStyle = pattern;
27   context.textAlign = \'right\'
28   context.font = \'bold 50px Arial\'
29   context.fillText(\'Right\',150,150)
30 }

  垂直方向对齐:

  context.textBaseline = top || middle || bottom || alphabetic (默认,针对英文) || ideographic (针对汉字、日文) || hanging (针对印度字体)

 1 const baseLine =(ctx,y)=>{
 2     ctx.beginPath()
 3     ctx.moveTo(0,y)
 4     ctx.lineTo(ctx.canvas.width,y)
 5     ctx.strokeStyle = \'#333\'
 6     ctx.stroke()
 7 }
 8 
 9 // 第一行
10 const grd = context.createLinearGradient(50,50,60,50)
11 grd.addColorStop(0,\'#a1c4fd\')
12 grd.addColorStop(1,\'#c2e9fb\')
13 
14 context.beginPath()
15 context.fillStyle = grd
16 context.textBaseline = \'top\'
17 context.font = \'bold 50px Arial\'
18 context.fillText(\'Top\',150,50)
19 baseLine(context,50)
20 
21 // 第二行
22 context.beginPath()
23 context.lineWidth = 1
24 context.strokeStyle = \'#0091db\'
25 context.textBaseline = \'middle\'
26 context.font = \'bold 50px Arial\'
27 context.strokeText(\'Middle\',150,150)
28 baseLine(context,150)
29 
30 // 第三行
31 const IMAGE = new Image();
32 IMAGE.src = \'wood.jpg\';
33 IMAGE.onload = function() {
34   var pattern = context.createPattern(IMAGE, \'repeat\');
35   context.beginPath()
36   context.fillStyle = pattern;
37   context.textBaseline = \'bottom\'
38   context.font = \'bold 50px Arial\'
39   context.fillText(\'Bottom\',150,250)
40   baseLine(context,250)
41 }

4、文本的度量

  context.measureText(string).width

  根据当前所设置的font属性,返回string在canvas中的宽度

 1 context.beginPath()
 2 context.fillStyle = \'#a1c4fd\'
 3 context.font = \'bold 50px Arial\'
 4 context.textAlign = \'center\'
 5 context.fillText(\'Hello\', context.canvas.width / 2, 50)
 6 
 7 const WIDTH = parseInt(context.measureText(\'Hello\').width)
 8 
 9 context.beginPath()
10 context.fillText(`Hello在canvas中的宽度为${WIDTH}px`, context.canvas.width / 2, 100)

 

以上是关于Canvas--文字渲染的主要内容,如果未能解决你的问题,请参考以下文章

Canvas自定义文字旋转缩放渲染

canvas绘图详解-10-文字渲染

canvas转图片中的文字自动换行

用WPF编程,本来在canvas上显示图像了。如何在上面继续显示文字啊??谢谢了

Markdown简明教程

Markdown简明教程