1.绘制描边文本

  • 说明:描边的属性是共用的,无论是绘制直线还是文字,所以有需要的话要单独设置描边颜色,相关语法如下
语法 说明
ctx.strokeStyle 设置描边的颜色(文本颜色)
ctx.font 设置文本,语法与 CSS font 属性相同,详见
ctx.strokeText(str,x0,y0) 传入参数,进行文本绘制
<script>
var canvas = document.querySelector("canvas")
var ctx = canvas.getContext("2d") //绘制中心线
ctx.moveTo(0,canvas.height/2)
ctx.lineTo(canvas.width,canvas.height/2)
//绘制虚线
ctx.setLineDash([5,10])
//描边
ctx.stroke()
//开启路径
ctx.beginPath()
ctx.moveTo(canvas.width/2,0)
ctx.lineTo(canvas.width/2,canvas.height)
//绘制虚线
ctx.setLineDash([5,10])
//描边
ctx.stroke() //以正中央为基点绘制文本)
//文本颜色就是描边的颜色
ctx.strokeStyle = "red"
//设置字体大小和字体类型
ctx.font = "40px 微软雅黑"
//取消虚线绘制
ctx.setLineDash([1,0])
//绘制文本
ctx.strokeText("你好世界",canvas.width/2,canvas.height/2)
</script>

2.修改文本对齐方式(水平方向)

  • 说明:文本默认左对齐,可以通过ctx.textAlign设置文本的对齐方式,他有以下几个值:
可选值 说明
left 默认,左对齐,原点位于文字的左下角
center 居中对齐,原点位于文字的中下方
right 右对齐,原点位于文字的右下角
<script>
//其余代码省略 //绘制左对齐文本(默认就是这个,不设置也是这效果)
ctx.textAlign ="left"
ctx.strokeText("默认左对齐",canvas.width/2,canvas.height/2) //绘制居中对齐的文本
ctx.textAlign = "center"
ctx.strokeText("居中对齐",canvas.width/2,100) //绘制右对齐的文本
ctx.textAlign = "right"
ctx.strokeText("右对齐",canvas.width/2,200)
</script>

  • 注意:这个属性会被后面的代码继承

3.修改文本基线

  • 说明:通俗的说,就是文本垂直方向的对其方式,通过ctx.textBaseline可以修改文本的基线,方法与css的vertical-align类似,他有以下几个值:
可选值 说明
baseline 默认,基线对其
middle 垂直方向上居中对齐
top 文本顶对齐
bottom 文本底对齐
<script>
//以上代码省略 //绘制底部对齐文本
ctx.textBaseline ="bottom"
ctx.strokeText("底对齐",0,canvas.height/2) //绘制垂直居中对齐的文本
ctx.textBaseline = "middle"
ctx.strokeText("垂直居中对齐",150,canvas.height/2) //绘制顶对齐的文本
ctx.textBaseline = "top"
ctx.strokeText("顶对齐",350,canvas.height/2)
</script>

4.绘制填充文本(实心文字)

  • 说明:填充的属性是共用的,无论是填充矩形还是文字,所以有需要的话要单独设置颜色,相关语法如下
语法 说明
ctx.fillStyle 设置填充的颜色(文本颜色)
ctx.font 设置文本,语法与 CSS font 属性相同,详见
ctx.fillText(str,x,y,maxWidth) 传入参数,进行文本绘制
<script>
//以上代码省略 //设置填充颜色
ctx.fillStyle = "green"
//设置文本大小和字体
ctx.font = "40px 微软雅黑" //绘制填充文本
ctx.fillText("填充的文本",canvas.width/2,canvas.height/2) //绘制填充文本(限制文本最大宽度)(宽度为画布的1/2)
ctx.fillText("这是有最大宽度限制的文本",0,200,canvas.width/2) </script>

  • 注意:参数maxWidth(文本的最大宽度)可选,如果文本的实际宽度大于这个限制,所有的文本会被压扁

5.获取文本的宽度

  • 相关语法:ctx.measureText(str)返回一个文本测量结果的对象,其中的width属性描述的就是文本的宽度

  • 注意:返回文本宽度除了与文本内容有关,还和当前设定的字体大小相关

<script>
//以上代码省略 //绘制填充文本
var cName = "人类三大本质"
var name = "hello world" //设置文本大小和字体
ctx.font = "40px 微软雅黑"
ctx.fillText(cName,50,50)
ctx.fillText(name,50,100)
//打印宽度
console.log(ctx.measureText(cName).width)
console.log(ctx.measureText(name).width) //重新设置文本大小和字体
ctx.font = "20px 微软雅黑"
ctx.fillText(cName,50,150)
ctx.fillText(name,50,200)
//打印宽度
console.log(ctx.measureText(cName).width)
console.log(ctx.measureText(name).width) </script>

  • 实例:为文本添加一条长度相等的下划线
<script>
var canvas = document.querySelector("canvas")
var ctx = canvas.getContext("2d")
//设置绘制原点
var x=80,y=150
//设置填充颜色
ctx.fillStyle = "green"
//定义文本
var cName = "人类三大本质"
//设置文本大小和字体
ctx.font = "40px 微软雅黑"
//设置底居中
ctx.textBaseline = "bottom"
ctx.fillText(cName,x,y)
//获取文本宽度
var textWidth = ctx.measureText(cName).width
//绘制直线
ctx.moveTo(x,y)
ctx.lineTo(x+textWidth,y)
ctx.stroke()
</script>

canvas(五)绘制文本的更多相关文章

  1. Javascript高级编程学习笔记(88)—— Canvas(5)绘制文本

    绘制文本 同样的,canvas也为绘制文本提供了相应的方法. 2D上下文提供的文本绘制方法主要有两个: fillText() strokeText() 这两个方法都接受四个参数 要绘制的文本字符串 绘 ...

  2. Canvas:绘制文本

    基础 画布除了绘制图形以外还可以绘制文本,画布中的文本可以设置字体大小.字体格式.对齐方式(横向和纵向对齐方式),并且还可以制作很炫酷的文本,比如渐变文字. 文本有以下三个属性,控制文本的字体大小.字 ...

  3. -_-#【Canvas】绘制文本

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. 浅谈JavaScript的Canvas(绘制图形)

    HTML5中新增加的一个元素canvas,要使用canvas元素,浏览器必须支持html5.通过canvas标签来创建元素,并需要为canvas指定宽度和高度,也就是绘图区域的大小. <canv ...

  5. html5 canvas 笔记三(绘制文本和图片)

    绘制文本 fillText(text, x, y [, maxWidth])   在指定的(x,y)位置填充指定的文本,绘制的最大宽度是可选的. strokeText(text, x, y [, ma ...

  6. canvas绘制文本

    canvas绘制文本 属性和方法 font = value 设置字体 textAlign = value 设置字体对齐方式 start, end, left, right, center textBa ...

  7. canvas 绘制文本

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. 用html5的canvas画布绘制贝塞尔曲线

    查看效果:http://keleyi.com/keleyi/phtml/html5/7.htm 完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...

  9. HTML5在canvas中绘制复杂形状附效果截图

    HTML5在canvas中绘制复杂形状附效果截图 一.绘制复杂形状或路径 在简单的矩形不能满足需求的情况下,绘图环境提供了如下方法来绘制复杂的形状或路径. beginPath() : 开始绘制一个新路 ...

  10. FontMetrics ----- 绘制文本,获取文本高度

    Canvas 绘制文本时,使用FontMetrics对象,计算位置的坐标. public static class FontMetrics { /** * The maximum distance a ...

随机推荐

  1. EF Core – Get Started 搭建单侧环境

    有时候想搭个环境做测试, 又记不住那些 command, 官方教程又啰嗦. git clone 模板又不太好管理, 索性记入在这里吧. 创建项目 dotnet new webapp -o Simple ...

  2. 系统编程-进程-当文件操作遇上fork

    我的关联博文: 系统编程-进程-fork深度理解.vfork简介 系统编程-进程-先后fork或open一个文件的区别 test1:   lseek基本使用 #include <stdio.h& ...

  3. `->` 操作符重载的注意事项

    在 C++ 中,-> 操作符可以被重载,用于对象的指针成员访问. 重载后的 -> 操作符主要用于模拟指针访问行为,常见于智能指针的实现等复杂场景. -> 操作符重载后的调用触发流程: ...

  4. 可视化U-Net编码器每层的输出(在已经训练好的模型下展示,并不是初始训练阶段展示)

    想看一下对于一个训练好的模型,其每一层编码阶段的可视化输出是什么样子的.我以3Dircabd肝脏血管分割为例,训练好了一个U-Net模型.然后使用该模型在推理阶段使用,并可视化了每一层编码器. 分割结 ...

  5. Java日期时间API系列37-----时间段是否有重叠(交集)的计算方法

    在日程安排或预约排期等场景中,经常会需要对比2个或多个时间段是重叠的功能,我经过整理和验证,发现了下面的算法比较好一些,分享一下. 1.只有2个时间段的情况 例如:存在区间A.区间B,重叠的情况很多, ...

  6. linux运维巡检脚本

    #!/bin/bash#author by acrossyao#date: 2021-02-08#张波勇巡检脚本echo "--------------------------------- ...

  7. java工具篇-IDEA

    java的开发离不开好的开发工具,这就需要了解集成开发工具idea 背景黑白风格 设置方法File–>settings–>Appearance & Behavior–>App ...

  8. 16收16发ARINC429模块

    6通道发送, 16通道接收* 发送通道:每路发送通道FIFO大小为:511 x 32bit(CHR32216/32316) ,缓存256条发送消息(CHR32216-EX/32316-EX)发送FIF ...

  9. 使用 KubeKey 安装部署 Kubernetes 与 Kube-OVN

    作者简介:林瑞超,锐捷网络开发工程师, KubeSphere 社区 contributor, 关注Kube-OVN, Cilium 等容器网络相关技术 背景 KubeKey 是 KubeSphere ...

  10. Java高并发关于synchronized的8锁讲解

    先了解一个概念:synchronized 锁的是这个方法所在的资源类,就是这个对象,也就是同一时间段不可能有两个线程同时进到这个资源类,同一时间段,只允许有一个线程访问资源类里面的其中一个synchr ...