canvas绘制文本

Posted hack-ing

tags:

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

##在canvas中绘制文本
canvas 提供了两种方法来渲染文本:
fillText(text, x, y)
在指定的(x,y)位置填充指定的文本
strokeText(text, x, y)
在指定的(x,y)位置绘制文本边框

                ctx.fillText("填充指定的文本",10,100);
                ctx.strokeText("绘制文本边框",10,150);
技术图片
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            html,body{
                height: 100%;
                overflow: hidden;
            }
            body{
                background: pink;
            }
            #test{
                background: gray;
                position: absolute;
                left: 0;
                top: 0;
                right: 0;
                bottom: 0;
                margin: auto;
            }
        </style>
    </head>
    <body>
        <canvas id="test" width="300" height="300">
            <span>您的浏览器不支持画布元素 请您换成萌萌的谷歌</span>
        </canvas>
    </body>
    <script type="text/javascript">
        window.onload=function(){
            var canvas = document.querySelector("#test");
            if(canvas.getContext){
                var ctx = canvas.getContext("2d");
                ctx.fillStyle="green"
                ctx.font="40px sans-serif"
//                在指定的(x,y)位置填充指定的文本
                ctx.fillText("填充指定的文本",10,100);
                ctx.strokeText("绘制文本边框",10,150);
            }
        }
        
        
    </script>
</html>
fillText-strokeText

 


###文本样式
font = value
当前我们用来绘制文本的样式. 这个字符串使用和 CSS font 属性相同的语法.
默认的字体是 10px sans-serif。
font属性在指定时,必须要有大小和字体 缺一不可

ctx.font="40px sans-serif";

 


textAlign = value
文本对齐选项. 可选的值包括: left, right center.

ctx.textAlign="right";

 


left
文本左对齐。
right
文本右对齐。
center
文本居中对齐。
这里的textAlign="center"比较特殊。textAlign的值为center时候
文本的居中是基于你在fillText的时候所给的x的值,
也就是说文本一半在x的左边,一半在x的右边

技术图片
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            html,body{
                height: 100%;
                overflow: hidden;
            }
            body{
                background: pink;
            }
            #test{
                background: gray;
                position: absolute;
                left: 0;
                top: 0;
                right: 0;
                bottom: 0;
                margin: auto;
            }
        </style>
    </head>
    <body>
        <canvas id="test" width="300" height="300">
            <span>您的浏览器不支持画布元素 请您换成萌萌的谷歌</span>
        </canvas>
    </body>
    <script type="text/javascript">
        window.onload=function(){
            var canvas = document.querySelector("#test");
            if(canvas.getContext){
                var ctx = canvas.getContext("2d");
                ctx.fillStyle="green";
                ctx.font="40px sans-serif";
                ctx.textAlign="right";
                ctx.fillText("大小和字体 缺一不可",300,50);
            }
        }
        
        
    </script>
</html>
View Code

 



textBaseline = value
描述绘制文本时,当前文本基线的属性。
top
文本基线在文本块的顶部。
middle
文本基线在文本块的中间。
bottom
文本基线在文本块的底部。

ctx.textBaseline="middle";

 

###measureText
measureText() 方法返回一个 TextMetrics 对象,包含关于文本尺寸的信息(例如文本的宽度)

###canvas中文本水平垂直居中

技术图片
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{margin: 0;padding: 0;}
            body{ background:black;}
            #c1{ background:white;}
        </style>
    </head>
    <body>
        <canvas id="c1" width="400" height="400"></canvas>
    </body>
    <script type="text/javascript">
        window.onload = function(){
            var oC =document.getElementById(c1);
            var oGC = oC.getContext(2d);
            oGC.font = 60px impact;
            oGC.textBaseline = middle;  //middle bottom
            var w = oGC.measureText(水平).width;
            oGC.fillText(水平居中,(oC.width - w)/2 , (oC.height - 60)/2);
        };
    </script>
</html>
View Code

 


 

 


###阴影(文本阴影&盒模型阴影)
shadowOffsetX = float
shadowOffsetX 和 shadowOffsetY 用来设定阴影在 X 和 Y 轴的延伸距离,
它们默认都为 0。
shadowOffsetY = float
shadowOffsetX 和 shadowOffsetY 用来设定阴影在 X 和 Y 轴的延伸距离,
它们默认都为 0。
shadowBlur = float
shadowBlur 用于设定阴影的模糊程度,其数值并不跟像素数量挂钩,也不受变换矩阵的影响,默认为 0。
shadowColor = color(必需项)
shadowColor 是标准的 CSS 颜色值,用于设定阴影颜色效果,默认是全透明的黑色。

            oGC.shadowOffsetX = 20;
            oGC.shadowOffsetY = 20;
            oGC.shadowBlur = 30;
            oGC.shadowColor = "yellow";
            
            
            oGC.fillRect(0,0,100,100);
技术图片
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{margin: 0;padding: 0;}
            body{ background:black;}
            #c1{ background:white;}
        </style>
    </head>
    <body>
        <canvas id="c1" width="400" height="400"></canvas>
    </body>
    <script type="text/javascript">
        window.onload = function(){
            var oC =document.getElementById(c1);
            var oGC = oC.getContext(2d);
            
            //文本阴影&盒阴影
            oGC.shadowOffsetX = 20;
            oGC.shadowOffsetY = 20;
            oGC.shadowBlur = 30;
            oGC.shadowColor = "yellow";
            
            
            oGC.fillRect(0,0,100,100);
        };
    </script>
</html>
View Code

 

以上是关于canvas绘制文本的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android Canvas 中绘制带有文本的矩形按钮?

canvas绘制文本

微信小程序 canvas绘制多行文本(文本换行)

canvas绘制文本

微信小程序-canvas绘制文字实现自动换行

canvas之文本