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' ...
随机推荐
- PLT redirection through shared object injection into a running process
PLT redirection through shared object injection into a running process
- VO、DTO与领域模型的概念
业务对象模型(也叫领域模型 domain model)是描述业务用例实现的对象模型.它是对业务角色和业务实体之间应该如何联系和协作以执行业务的一种抽象.业务对象模型从业务角色内部的观点定义了业务用例. ...
- 微软BI 之SSRS 系列 - 解决Pie Chart 中控制标签外部显示与标签重叠的问题
当 Pie Chart 页面标签过多的时候,往往数字标签内容挤做一团.我们要做的是:第一,让标签在饼图外部显示:第二,不让标签重叠. 一种做法是通过修改数字标签属性 - Series Label Pr ...
- python转换html到pdf文件
1.安装wkhtmltopdf Windows平台直接在 http://wkhtmltopdf.org/downloads.html 下载稳定版的 wkhtmltopdf 进行安装,安装完成之后把该程 ...
- 使用 axios 详解
Vue.js 1.0 我们常使用 vue-resource (官方ajax库), Vue 2.0 发布后作者宣告不再对 vue-resource 进行更新, 推荐我们使用 axios (基于 Prom ...
- cocos2d-js 3.0 rc2 自定义UI控件组件 例子:能播放动画的MenuItem。MenuItemSprite的bug
其实总体自定义UI组件都比较简单,尤其是cocos2d-js是开源的,如果有什么不明白的直接看js代码或者C++代码即可.当然js代码基本就够了. 另外,js的ctor函数虽然说是构造函数,但毕竟不是 ...
- 八叉树(Octree)
八叉树(Octree)是一种用于描述三维空间的树状数据结构.想象一个立方体,我们最少可以切成多少个相同等分的小立方体?答案就是8个.再想象我们有一个房间,房间里某个角落藏着一枚金币,我们想很快的把金币 ...
- 常见pip方法
pip search 包名 查询 pip install 包名 安装包 pip show--files 包名 pip list --outdated 检查哪些包需要更新 pip insta ...
- linux写环境变量对字符转义
之前在配置oracle环境换了或者jdk环境,用脚本初始化配置,发现$JAVA_HOME被真实路径取代,这不操蛋吗,今天无意间发现echo -e可以转义特殊字符 得之兴业,岁在今朝! 对oracle ...
- Hadoop之我见
最近在学习Hadoop,很想把自己的一些学习遇到的问题以及解决方案分享出来,也碍于最近一堆忙不完的事,就把这事给搁了很久. 那下面我就先来简单说下我为什么要学习Hadoop以及我学习Hadoop的一些 ...