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' ...
随机推荐
- .NET 托管、非托管、本地:这些代码有什么区别?
http://www.codeguru.com/Csharp/.NET/cpp_managed/article.php/c4871 本文内容 什么是托管代码? 什么是非托管代码? 什么是本地代码? 托 ...
- iOS编程(双语版) - 视图 - Transform(转换)
视图有一个transform属性,它描述了应该如何绘制该视图. 该属性是CGAffineTransform结构体,它代表了3 x 3的变换矩阵(线性代数). 下面的代码让两个矩形视图旋转45度 (Ob ...
- 【树莓派】crontab设置Linux设备定时重启
简介:设置Linux设备定时重启或者关机 问题:有台设备每天总需要使用的人手动重启一下才可以正常工作,但是检查了日志,看起来服务一切都正常.时间和正确时间相差4mins. 解决办法: 1.增加定时任务 ...
- 1050: 贝贝的ISBN号码(isbn)
#include <iostream> #include <iomanip> #include <cstdlib> #include <string> ...
- C# 只能输入字母或数字
c# 只能输入字母或者数字 或者退格符 方法一:KeyPress private void textBox2_KeyPress(object sender, KeyPressEventArgs e) ...
- Webwork【03】核心类 ServletDispatcher 的初始化
1. Webwork 与 Xwork 搭建环境需要的的jar 为:webwork-core-1.0.jar,xwork-1.0.jar,搭建webwork 需要xwork 的jar呢?原因是这样的,W ...
- 包管理和环境管理软件Anaconda
可以用于配置linux下得虚拟环境,该软件可以针对不同服务配置不同的运行环境,方便包管理与环境管理
- 〖Linux〗干掉Kubuntu烦人的软件升级提示“Update notification daemon”,Your should update ..
Kubuntu是很好使用,但是升级提示也是太烦人了,开机的时候总是显示如下画面: 使用System Load Indicator(sudo apt-get install indicator-mult ...
- 【DB2】查看表空间对应的物理文件地址
使用的命令: db2 list tablespaces show detail db2 list tablespace containers for [Tablespace ID] [show det ...
- redis实现简单的分布式锁
在分布式系统中多个请求并发对少数资源进行争抢,例如10个人同时秒杀一件商品,如果不用分布式的锁进行处理(当然还有其它的处理方案),则很容易出现多个人抢到一个商品(超卖)的情况,用redis可以比较容易 ...