Canvas文本操作
绘制填充文本:fillText();
绘制描边文本:strokeText();
绘制文本并返回一个对象:measure();
measure()方法返回的对象中包括一个width属性,该属性表达绘制的文本所占领的宽度。
<canvas id="canvas1" width="300" height="150"></canvas>
var canvas = document.getElementById("canvas1");
var context = canvas.getContext("2d"); // fill font
context.font = "60px Palatino";
context.fillStyle = "red";
context.fillText("Cancas", 30, 60); // stroke font
context.strokeStyle = "yellow";
context.strokeText("Cancas", 30, 60); // back measure object
context.fillStyle = "blue";
var measure = context.measureText("Cancas", 30, 120); // print text width
console.log(measure.width);
Canvas画图环境提供三个属性如:
设置稍后画图环境所绘制文本的字型:font;
文本水平方向定位:textAlign;
文本垂直方向定位:textBaseline;
textBaseline属性包括的值:
top
bottom
middle
alphabetic
ideographic
hanging
textBaseline属性的默认值alphabetic;
alphabetic:该值用于绘制由基于拉丁字母的语言所组成的字符串。
ideographic:该用于绘制日文或中文字符;
hanging:该值用于绘制各种印度语字符串。
top、bottom与middle这三个值与特定的语言不相关,它们代表文本周围的边界框之内的某个位置,这个边界框也叫做“字符方框”(em square)
<canvas id="canvas2" width="500" height="300"></canvas>
var canvas = document.getElementById("canvas2");
var context = canvas.getContext("2d"); function drawBackground() { var STEP_Y = 12,
TOP_MARGIN = STEP_Y * 4,
LEFT_MARGIN = STEP_Y * 3,
i = context.canvas.height; context.strokeStyle = "lightgray";
context.lineWidth = 1; while( i > STEP_Y ) {
context.beginPath();
context.moveTo(0, i + 0.5);
context.lineTo(context.canvas.width, i + 0.5);
context.stroke();
i -= STEP_Y;
} context.strokeStyle = "rgba(100, 0, 0, 0.3)";
context.lineWidth = 1;
context.beginPath();
context.moveTo(LEFT_MARGIN, 0);
context.lineTo(LEFT_MARGIN, context.canvas.height);
context.stroke(); }
// draw background
drawBackground(); // 给文本填充渐变效果
var gradient = context.createLinearGradient(0, 0,
canvas.width, canvas.height);
gradient.addColorStop(0, "red");
gradient.addColorStop(1, "blue"); context.font = "60px Arial";
context.textAlign = "left";
context.textBaseline = "middle";
context.fillStyle = gradient;
context.fillText("CANVAS", 60, 60); context.strokeStyle = "red";
context.beginPath();
context.moveTo(0.5, 60);
context.lineTo(canvas.width+0.5, 60);
context.stroke();
注意:在调用measureText方法之前先设置好字形
在使用measureText方法时,常见的错误就是在调用完该方法之后。才去设置字形。请注意,measuerText方法是依据当前的字形来计算字符串的宽度,因此,假设你在调用measureText方法之后去改变字形,那么该方法返回的宽度并不能反映出以那种字形来度量的实际文本宽度
在圆弧周围绘制文本
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
<canvas id="canvas3" width="500" height="500"></canvas>
var canvas = document.getElementById("canvas3");
var context = canvas.getContext("2d"); // 圆弧的属性,圆弧的坐标及圆弧的半径//
var circle = {
x: canvas.width/2,
y: canvas.height/2,
radius:200
} function drawCircularText(string, startAngle, endAngle) { var radius = circle.radius,//圆弧半径
angleDecrement = (startAngle - endAngle)/(string.length - 1),//计算出第一个字符所占有的弧度
angle = parseFloat( startAngle ),//将弧度转换浮点型
index = 0,//在canvas中绘制到第几个字符的索引
character;//把当前绘制的字符赋予它 // 保存当前画图环境(canvas的属性、剪辑区域、translate)
context.save(); context.fillStyle = "red";
context.strokeStyle = "blue";
context.font = "20px Lucida Sans"; while ( index < string.length ) { // 获取当前要绘制的字符
character = string.charAt(index); // 保存当前之前的环境增状态
context.save();
// 清除当前路径的子路径
context.beginPath(); // 位移
context.translate(circle.x + Math.cos(angle) * radius,
circle.y - Math.sin(angle) * radius); // 旋转弧度
context.rotate(Math.PI/2 - angle); // 填充文本
context.fillText(character, 0, 0);
// 描边文本
context.strokeText( character, 0, 0);
// 又一次计算下一个字符的弧度
angle -= angleDecrement;
// 获取下一个字符的索引
index++; // 还原上次save()状态
context.restore(); } context.restore();
} drawCircularText("canvas's hello word canvas's hello word", Math.PI*2, Math.PI / 8);
Canvas文本操作的更多相关文章
- Linux命令-文件文本操作grep
文件文本操作 grep 在文件中查找符合正则表达式条件的文本行 cut 截取文件中的特定字段 paste 附加字段 tr 字符转换或压缩 sort 调整文本行的顺序,使其符合特定准则 uniq 找出重 ...
- canvas文本自动换行
在用canvas中写刮奖结果的时候发现canvas中的文本不会自动折行,要进行截断另起一行来写.在此参考文章html5-canvas的绘制文本自动换行来做改写. 根据canvas宽度来做折行 在此根据 ...
- linux文本操作界面 vi面板如何复制一行
linux文本操作界面 vi面板如何复制一行 1)把光标移动到要复制的行上2)按yy3)把光标移动到要复制的位置4)按p 在vi里如何复制一行中间的几个字符?如果你要从光标处开始复制 4 个字符,则先 ...
- HTML&CSS基础学习笔记1.6-html的文本操作标签
文本也许是HTML里最常见的元素了,所以我们有必要对HTML的文本操作标签做下认识. 1. <em>,<i>内的文字呈现为倾斜效果: 2. <strong>,< ...
- 如何设置secureCRT的鼠标右键为弹出文本操作菜单功能
secureCRT的鼠标右键功能默认是粘贴的功能,用起来和windows系统的风格不一致, 如果要改为右键为弹出文本操作菜单功能,方便对选择的内容做拷贝编辑操作,可以在 options菜单----&g ...
- jQuery 选择器 筛选器 样式操作 文本操作 属性操作 文档处理 事件 动画效果 插件 each、data、Ajax
jQuery jQuery介绍 1.jQuery是一个轻量级的.兼容多浏览器的JavaScript库. 2.jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方 ...
- Shell命令之文本操作
前言 在Linux中,文本处理操作是最常见的,应用非常广泛,如果能熟练掌握,可以大大提高开发效率. awk/sed/grep是文本操作领域的“三剑客”,学会了这3个命令就可以应对绝大多数文本处理场景. ...
- html5 canvas文本处理
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- python中的文本操作
python如何进行文本操作 1.能调用方法的一定是对象,比如数值.字符串.列表.元组.字典,甚至文件也是对象,Python中一切皆为对象. str1 = 'hello' str2 = 'world' ...
随机推荐
- android中XRecyclerView控件的使用
控件的地址:https://github.com/XRecyclerView/XRecyclerView XRecyclerView控件是一个加强版的RecyclerView,可以很方便的实现下拉刷新 ...
- LintCode: Number of Airplanes in the Sky
C++ (1)把interval数组中的所有start和所有end放在同一个数组中,然后进行排序,遇到start就起飞一架飞机,遇到一架end就降落一架飞机,所以start有个+1属性,end有个-1 ...
- LNMP一键安装包-CentOS/Ubuntu/Debian自动安装Nginx,MySQL,PHP
适用环境: 系统支持:CentOS.Ubuntu.Debian 内存要求:≥128M 安装了什么: 1.Nginx-1.2.1 2.MySQL 5.5.25 3.PHP 5.2.17或PHP 5.3. ...
- 【BZOJ2631】tree
Description 一棵n个点的树.每一个点的初始权值为1. 对于这棵树有q个操作,每一个操作为下面四种操作之中的一个: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 ...
- Python学习笔记五:错误与异常
一:常见异常与错误 BaseException 所有异常的基类SystemExit 解释器请求退出KeyboardInterrupt 用户中断执行(通常是输入^C)Exception 常规错误的基类S ...
- JavaWeb项目配置化之Properties类的使用
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6397370.html 在项目中的应用见: https://github.com/ygj0930/Couple ...
- Oracle Data Integrator 12c----简单CDC(Simple CDC)
Simple CDC最简单的一种 CDC.在这里,每一张 CDC 的表的变化都是独立捕获的,不需要考虑多张存在主外键引用关系的表之间的数据一致性. 1 环境准备 源表:ODI_SRC.DEPT 目标表 ...
- 一张图弄明确开源协议-GPL、BSD、MIT、Mozilla、Apache和LGPL 之间的差别
导读 在开源软件中常常看到各种协议说明.GPL.BSD.MIT.Mozilla.Apache和LGPL. - 这些协议之间的有什么差别 - 怎样选择合适的开源协议 请看下文,特作记录一篇,以供兴许查看 ...
- 〖Linux〗bash和expect执行ssh命令行sshcmd.exp
#!/usr/bin/expect -f # sudo apt-get install expect # ./ssh.exp user passwd server set user [lrange $ ...
- Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener. ...nested exception is java.lang.NoSuchMethodError:
ssh 中,项目部署到服务器的时候,出现这样的奇葩的事情: 21-Oct-2017 11:27:15.953 INFO [localhost-startStop-1] org.apache.catal ...