Html5 Canvas Text

html5 canvas中支持对text文本进行渲染;
直接的理解就是把text绘制在画布上,并像图形一样处理它(可以加shadow、gradient、pattern、color fill等等);
既然它的本质是文字,就会具有文字所特有的一些属性;本篇的侧重点也在于此;
不过,在最后会增加一些图形填充效果在text上应用的实例;

context.font:
[font style] [font weight] [font size] [font face]
字体属性的设置与css中的类似;
例:context.font = "italic bold 24px serif"; context.font = "normal lighter 50px cursive";

context.measureText(message):
当我们提供一个文本message,调用此方法,
它会依据当前context设置的字体、大小等,返回一个文本的度量信息对象TextMetrics;
当前html5 canvas中TextMetrics对象,仅包含一个属性,就是width; 
可以用来确定当前给定字符串文本的在当前环境下的宽度;
例如:
var metrics = context.measureText(message);
var textWidth = metrics.width;

fillText([text],[x],[y],[maxWidth]):
参数的意义:
text:要在canvas上要渲染的文本内容;
x,y:代表开始渲染的点的位置坐标;
maxWidth:代表最大宽度;

与之搭配的设置文本的颜色属性:fillStyle

strokeText([text],[x],[y],[maxWidth]):
参数的意义与fillText相同;与fillText相比,它指渲染文字的轮廓;
与之搭配的设置文本的颜色属性:strokeStyle

Canvas中有对文本对齐方式的支持,包括两个选项:水平Horizontal alignment与竖直Vertical alignment;
context.textAlign:文字水平对齐方式。可取属性值: start, end, left,right, center。默认值:start.
context.textBaseline:文字竖直对齐方式。可取属性值:top, hanging, middle,alphabetic, ideographic, bottom。默认值:alphabetic.

Horizontal alignment选项:center|start|end|left|right
例:context.textAlign = "center";

Vertical alignment选项:top|hanging|middle|alphabetic|ideographic|bottom
例:context.textBaseline = "top";

当我们把一段文本渲染在canvas上时,文本本身显示在画布上,会占据一个矩形块(看不见的矩形,我们暂且称其为IBox(invisible bounding box));

这里提到的对齐方式,都是针些这个文本所占据的这个IBox来操作的(IBox有,上,下,左,右四条边线);

把字符串“HA”在画布的中心点位置(两条黑色直线相交点为中心);textAlign为默认值,应用不同的textBaseline所产生的效果如下图:

把字符串“HA”在画布的中心点位置(两条黑色直线相交点为中心);textBaseline为默认值,应用不同的textAlign所产生的效果如下图:

使用实例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>test</title>
    <!--<script type="text/javascript" src="modernizr-latest.js"></script>-->
    <script src="Js/modernizr-2.6.2.js"></script>
    <script type="text/javascript">
        window.addEventListener("load", eventWindowLoaded, false);

        function eventWindowLoaded() {
            canvasApp();
        }

        function canvasSupport() {
            return Modernizr.canvas;
        }

        function eventWindowLoaded() {
            canvasApp();
        }

        function canvasApp() {
            var message = "your text";
            var fillOrStroke = "fill";
            var fontSize = "50";
            var fontFace = "serif";
            var textFillColor = "#ff0000";
            var textBaseline = "middle";
            var textAlign = "center";
            var fontWeight = "normal";
            var fontStyle = "normal";

            if (!canvasSupport()) {
                return;
            }

            var theCanvas = document.getElementById("canvasOne");
            var context = theCanvas.getContext("2d");
            var formElement = document.getElementById("textBox");
            formElement.addEventListener(‘keyup‘, textBoxChanged, false);
            formElement = document.getElementById("fillOrStroke");
            formElement.addEventListener(‘change‘, fillOrStrokeChanged, false);
            formElement = document.getElementById("textSize");
            formElement.addEventListener(‘change‘, textSizeChanged, false);
            formElement = document.getElementById("textFillColor");
            formElement.addEventListener(‘change‘, textFillColorChanged, false);
            formElement = document.getElementById("textFont");
            formElement.addEventListener(‘change‘, textFontChanged, false);
            formElement = document.getElementById("textBaseline");
            formElement.addEventListener(‘change‘, textBaselineChanged, false);
            formElement = document.getElementById("textAlign");
            formElement.addEventListener(‘change‘, textAlignChanged, false);
            formElement = document.getElementById("fontWeight");
            formElement.addEventListener(‘change‘, fontWeightChanged, false);
            formElement = document.getElementById("fontStyle");
            formElement.addEventListener(‘change‘, fontStyleChanged, false);

            drawScreen();

            function drawScreen() {
                context.fillStyle = "yellow";
                context.fillRect(0, 0, theCanvas.width, theCanvas.height);
                context.lineWidth = 1;
                context.beginPath();
                context.moveTo(theCanvas.width / 2, 0);
                context.lineTo(theCanvas.width / 2, theCanvas.height);
                context.stroke();
                context.closePath();

                context.beginPath();
                context.moveTo(0, theCanvas.height / 2);
                context.lineTo(theCanvas.width, theCanvas.height / 2);
                context.stroke();
                context.closePath();

                //Text
                context.textBaseline = textBaseline;
                context.textAlign = textAlign;
                context.font = fontWeight + " " + fontStyle + " " + fontSize + "px " + fontFace;
                var xPosition = (theCanvas.width / 2);
                var yPosition = (theCanvas.height / 2);
                switch (fillOrStroke) {
                    case "fill":
                        context.fillStyle = textFillColor;
                        context.fillText(message, xPosition, yPosition);
                        break;
                    case "stroke":
                        context.strokeStyle = textFillColor;
                        context.strokeText(message, xPosition, yPosition);
                        break;
                    case "both":
                        context.fillStyle = textFillColor;
                        context.fillText(message, xPosition, yPosition);
                        context.strokeStyle = "#000000";
                        context.strokeText(message, xPosition, yPosition);
                        break;
                }
            }

            //添加阴影效果
            //function drawScreen() {
            //    context.fillStyle = "yellow";
            //    context.fillRect(0, 0, theCanvas.width, theCanvas.height);
            //    //Text
            //    context.textBaseline = textBaseline;
            //    context.textAlign = textAlign;
            //    context.shadowColor = "#707070";
            //    context.shadowOffsetX = 5;
            //    context.shadowOffsetY = 5;
            //    context.shadowBlur = 5;
            //    context.font = fontWeight + " " + fontStyle + " " + fontSize + "px " + fontFace;
            //    var xPosition = (theCanvas.width / 2);
            //    var yPosition = (theCanvas.height / 2);
            //    context.fillStyle = textFillColor;
            //    context.fillText(message, xPosition, yPosition);
            //}

            //添加渐变效果
            //function drawScreen() {
            //    context.fillStyle = "yellow";
            //    context.fillRect(0, 0, theCanvas.width, theCanvas.height);
            //    var gradient = context.createLinearGradient(0, 0, theCanvas.width, 0);
            //    context.font = "italic bold 40px serif";
            //    gradient.addColorStop(0, "#000000");
            //    gradient.addColorStop(.5, "#FF0000");
            //    gradient.addColorStop(1, "#00ff00");
            //    var xPosition = (theCanvas.width / 2);
            //    var yPosition = (theCanvas.height / 2);
            //    context.fillStyle = gradient;
            //    context.fillText("message", xPosition, yPosition);
            //}

            function textBoxChanged(e) {
                var target = e.target;
                message = target.value;
                drawScreen();
            }

            function fillOrStrokeChanged(e) {
                var target = e.target;
                fillOrStroke = target.value;
                drawScreen();
            }

            function textSizeChanged(e) {
                var target = e.target;
                fontSize = target.value;
                drawScreen();
            }

            function textFillColorChanged(e) {
                var target = e.target;
                textFillColor = "#" + target.value;
                drawScreen();
            }

            function textFontChanged(e) {
                var target = e.target;
                fontFace = target.value;
                drawScreen();
            }

            function textBaselineChanged(e) {
                var target = e.target;
                textBaseline = target.value;
                drawScreen();
            }

            function textAlignChanged(e) {
                var target = e.target;
                textAlign = target.value;
                drawScreen();
            }

            function fontWeightChanged(e) {
                var target = e.target;
                fontWeight = target.value;
                drawScreen();
            }

            function fontStyleChanged(e) {
                var target = e.target;
                fontStyle = target.value;
                drawScreen();
            }

        }
    </script>
</head>
<body>
    <div style="position: absolute; top: 50px; left: 50px;">
        <canvas id="canvasOne" width="400" height="150">
            Your browser does not support HTML5 Canvas.
        </canvas>
        <form>
            <span>Text</span>
            <input id="textBox" />
            <br />
            <span>Fill or Stroke</span>
            <select id="fillOrStroke">
                <option value="fill">fill</option>
                <option value="stroke">stroke</option>
                <option value="both">both</option>
            </select>
            <br />
            <span>Font</span>
            <select id="textFont">
                <option value="serif">serif</option>
                <option value="sans-serif">sans-serif</option>
                <option value="cursive">cursive</option>
                <option value="fantasy">fantasy</option>
                <option value="monospace">monospace</option>
            </select>
            <br />
            <span>font size</span>
            <input type="range" id="textSize" min="0" max="200" value="30" />
            <br />
            <span>font color</span>
            <input class="color" id="textFillColor" value="FF0000" />
            <br />
            <span>font weight</span>
            <select id="fontWeight">
                <option value="normal">normal</option>
                <option value="bold">bold</option>
                <option value="bolder">bolder</option>
                <option value="lighter">lighter</option>
            </select>
            <br />
            <span>font style</span>
            <select id="fontStyle">
                <option value="normal">normal</option>
                <option value="italic">italic</option>
                <option value="oblique">oblique</option>
            </select>
            <br />
            <span>textBaseLine</span>
            <select id="textBaseline">
                <option value="middle">middle</option>
                <option value="top">top</option>
                <option value="hanging">hanging</option>
                <option value="alphabetic">alphabetic</option>
                <option value="ideographic">ideographic</option>
                <option value="bottom">bottom</option>
            </select>
            <br />
            <span>TextAlign</span>
            <select id="textAlign">
                <option value="center">center</option>
                <option value="start">start</option>
                <option value="end">end</option>
                <option value="left">left</option>
                <option value="right">right</option>
            </select>
        </form>
    </div>
</body>
</html>

来源地址;

http://www.cnblogs.com/amtf/archive/2012/01/18/2324343.html

时间: 2024-10-17 11:05:13

Html5 Canvas Text的相关文章

html5 canvas 详细使用教程

导航 前言 基本知识 绘制矩形 清除矩形区域 圆弧 路径 绘制线段 绘制贝塞尔曲线 线性渐变 径向渐变(发散) 图形变形(平移.旋转.缩放) 矩阵变换(图形变形的机制) 图形组合 给图形绘制阴影 绘制图像(图片平铺.裁剪.像素处理[不只图像.包括其他绘制图形]) 绘制文字 保存和恢复状态(context) 保存文件 结合setInterval制作动画 结语.demo下载   前言 <canvas></canvas>是html5出现的新标签,像所有的dom对象一样它有自己本身的属性.

html5 Canvas绘制图形入门详解

html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome.Opera.Safari.IE9+)都已经开始支持html5了.除此之外,在移动浏览器市场上,众多的移动浏览器也纷纷展开关于「html5的支持能力以及性能表现」的军备竞赛.html作为革命性的网页技术标准,再加上众多浏览器厂商或组织的鼎力支持,可以想见,html5将会成为未来网页技术的领头羊. ht

前端-HTML5 canvas学习

canvas元素算是HTML5添加的最受欢迎的功能了.它是通过在页面中设定一个区域,然后用脚本来编辑图形. 可像下面这样来引入一个canvas图像 <canvas id="myCanvas"></canvas> <script type="text/javascript"> var canvas = document.getElementById('myCanvas'); var cxt = canvas.getContext('

html5 canvas文本处理

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

如何使用 HTML5 Canvas 制作水波纹效果

原文:如何使用 HTML5 Canvas 制作水波纹效果 今天,我们继续分享 JavaScript 实现的效果例子,这篇文章会介绍使用 JavaScript 实现水波纹效果.水波效果以图片为背景,点击图片任意位置都会触发.有时候,我们使用普通的 Javascript 就可以创建一个很有趣的解决功能. 在线演示      源码下载 Step 1. HTML 和以前一样,首先是 HTML 代码: <!DOCTYPE html> <html> <head> <meta

HTML5 Canvas ( 扩展context(&#39;2d&#39;) ) CanvasRenderingContext2D.prototype.你的方法名

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>canvas</title> <script type="text/javascript" src="../js/jQuery.js"></script> <style type="text/css">

HTML5 canvas绘图

HTML5 canvas画图 示例 ------- <!DOCTYPE html> <head> <meta charset="UTF-8"> <script src="jquery-3.1.1.min.js"></script> <link rel="stylesheet" type="text/css" href="style.css"

html5 Canvas颜色渐变(画图很重要)

如果我们想要给图形上色,有两个重要的属性可以做到:fillStyle 和 strokeStyle.    fillStyle = color    strokeStyle = color strokeStyle 是用于设置图形轮廓的颜色,而 fillStyle 用于设置填充颜色.color 可以是表示 CSS 颜色值的字符串,渐变对象或者图案对象.默认情况下,线条和填充颜色都是黑色(CSS 颜色值 #000000). 下面的例子都表示同一种颜色.   // 这些 fillStyle 的值均为 '

HTML5 canvas 绘制精美的图形

HTML5 是一个新兴标准,它正在以越来越快的速度替代久经考验的 HTML4.HTML5 是一个 W3C “工作草案” — 意味着它仍然处于开发阶段 — 它包含丰富的元素和属性,它们都支持现行的 HTML 4.01 版本规范.它还引入了几个新元素和属性,它们适用许多使用 web 页面的领域 — 音频.视频.图形.数据存储.内容呈现,等等.本文主要关注图形方面的增强:canvas. 新的 HTML5 canvas 是一个原生 HTML 绘图簿,用于 JavaScript 代码,不使用第三方工具.跨