HTML 5深入浅出教学篇之九

开发 前端
呈现文本|font, textAlign, textBaseline, strokeStyle, fillStyle, fillText(), measureText,TextMetrics.width

介绍

HTML 5: 画布(canvas)之承载媒体

呈现文本 - font, textAlign, textBaseline, strokeStyle, fillStyle, fillText(), measureText, TextMetrics.width

呈现图片 - drawImage()

呈现视频截图 - drawImage()

呈现其他画布 - drawImage()

示例

1、呈现文本 | font, textAlign, textBaseline, strokeStyle, fillStyle, fillText(), measureText, TextMetrics.width
canvas/media/text.html

  1. <!DOCTYPE HTML> 
  2. <html> 
  3. <head> 
  4.     <title>在 canvas 上呈现文本的 demo</title> 
  5. </head> 
  6. <body> 
  7.     <canvas id="canvas" width="600" height="600" style="background-color: rgb(222, 222, 222)"> 
  8.         您的浏览器不支持 canvas 标签  
  9.     </canvas> 
  10.     <br /> 
  11.     <button type="button" onclick="drawIt();">在画布上呈现一些文本</button> 
  12.     <button type="button" onclick="clearIt();">清除画布</button> 
  13.     <script type="text/javascript"> 
  14.         var canvas = document.getElementById('canvas');  
  15.         var ctx = canvas.getContext('2d');  
  16.         function drawIt() {  
  17.             clearIt();  
  18.             ctx.beginPath();  
  19.             ctx.moveTo(0, canvas.height / 2);  
  20.             ctx.lineTo(canvas.width, canvas.height / 2);  
  21.             ctx.moveTo(canvas.width / 2, 0);  
  22.             ctx.lineTo(canvas.width / 2, canvas.height);  
  23.             ctx.stroke();  
  24.             /*  
  25.              * context.font - 语法与 CSS 中的 font 属性相同,默认值为 10px sans-serif  
  26.              *  
  27.              * context.textAlign - 可能的值为:start, end, left, right, center;默认值为:start  
  28.              *  
  29.              * context.textBaseline - 可能的值为:top, hanging, middle, alphabetic, ideographic, bottom;默认值为:alphabetic  
  30.              */  
  31.             ctx.font = 'italic 24px 宋体';  
  32.             ctx.fillStyle = "blue";  
  33.             ctx.textBaseline = "top";  
  34.             // 不同 textAlign 的效果  
  35.             ctx.textAlign = "start";  
  36.             ctx.fillText("Horizontal", canvas.width / 2, 0);  
  37.             ctx.textAlign = "end";  
  38.             ctx.fillText("Horizontal", canvas.width / 2, 30);  
  39.             ctx.textAlign = "left";  
  40.             ctx.fillText("Horizontal", canvas.width / 2, 60);  
  41.             ctx.textAlign = "right";  
  42.             ctx.fillText("Horizontal", canvas.width / 2, 90);  
  43.             ctx.textAlign = "center";  
  44.             ctx.fillText("Horizontal", canvas.width / 2, 120);  
  45.             ctx.textAlign = "start";  
  46.             // 不同 textBaseline 的效果  
  47.             ctx.textBaseline = "top";  
  48.             ctx.fillText("Vertical", 0, canvas.height / 2);  
  49.             ctx.textBaseline = "hanging";  
  50.             ctx.fillText("Vertical", 100, canvas.height / 2);  
  51.             ctx.textBaseline = "middle";  
  52.             ctx.fillText("Vertical", 200, canvas.height / 2);  
  53.             ctx.textBaseline = "alphabetic";  
  54.             ctx.fillText("Vertical", 300, canvas.height / 2);  
  55.             ctx.textBaseline = "ideographic";  
  56.             ctx.fillText("Vertical", 400, canvas.height / 2);  
  57.             ctx.textBaseline = "bottom";  
  58.             ctx.fillText("Vertical", 500, canvas.height / 2);  
  59.             /*  
  60.              * context.strokeStyle - 调用 strokeText() 时字体的笔划颜色  
  61.              *  
  62.              * context.fillStyle - 调用 fillText() 时字体的填充颜色  
  63.              *  
  64.              * context.fillText(text, x, y [, maxWidth]) - 以填充的方式绘制文本内容  
  65.              *   text - 需要呈现的文本字符串  
  66.              *   x, y - 参考点坐标,textAlign 和 textBaseline 均会以此点为参考点  
  67.              *   maxWidth - 显示区域的最大长度,必要时会强制压缩文本的长度。可选参数  
  68.              *  
  69.              * context.strokeText(text, x, y [, maxWidth]) - 以笔划的方式绘制文本内容。参数说明同 fillText()  
  70.              */  
  71.             ctx.font = '64px 宋体';  
  72.             ctx.strokeStyle = 'blue';  
  73.             ctx.strokeText("strokeText", 0, 400);  
  74.             ctx.strokeText("strokeText", 0, 500, 100);  
  75.             /*  
  76.              * context.measureText(text) - 返回指定文本内容在当前上下文环境中的度量对象,即 TextMetrics 类型的对象  
  77.              * TextMetrics.width - TextMetrics 对象有一个名为 width 的只读属性,用于获取 TextMetrics 对象的长度值  
  78.              */  
  79.             var metrics = ctx.measureText("strokeText");  
  80.             alert(metrics.width);  
  81.         }  
  82.         function clearIt() {  
  83.             ctx.clearRect(0, 0, 600, 600);  
  84.             ctx.textAlign = "start";  
  85.             ctx.textBaseline = "alphabetic";  
  86.         }  
  87.     </script> 
  88. </body> 
  89. </html> 

#p#

2、呈现图片 | drawImage()canvas/media/image.html

  1. <!DOCTYPE HTML> 
  2. <html> 
  3. <head> 
  4.     <title>在 canvas 上呈现图片的 demo</title> 
  5. </head> 
  6. <body> 
  7.     <canvas id="canvas" width="800" height="600" style="background-color: rgb(222, 222, 222)"> 
  8.         您的浏览器不支持 canvas 标签  
  9.     </canvas> 
  10.     <br /> 
  11.     <button type="button" onclick="drawIt();">在画布上呈现图片</button> 
  12.     <button type="button" onclick="clearIt();">清除画布</button> 
  13.     <script type="text/javascript"> 
  14.         var ctx = document.getElementById('canvas').getContext('2d');  
  15.         function drawIt() {  
  16.             clearIt();  
  17.             var img = new Image();  
  18.             img.onload = function () {  
  19.                 /*  
  20.                  * context.drawImage() 的可绘制对象包括:HTMLImageElement, HTMLVideoElement, HTMLCanvasElement  
  21.                  *  
  22.                  * context.drawImage(image, x, y) - 绘制图像  
  23.                  *   image - 图像对象,可以来自 img 标签  
  24.                  *   x - 图像绘制到画布后的左上角的 x 坐标  
  25.                  *   y - 图像绘制到画布后的左上角的 y 坐标  
  26.                  *  
  27.                  * context.drawImage(image, x, y, width, height) - 绘制图像  
  28.                  *   image - 图像对象,可以来自 img 标签  
  29.                  *   x - 图像绘制到画布后的左上角的 x 坐标  
  30.                  *   y - 图像绘制到画布后的左上角的 y 坐标  
  31.                  *   width - 图像绘制到画布后的宽  
  32.                  *   height - 图像绘制到画布后的高  
  33.                  *  
  34.                  * context.drawImage(image, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight) - 绘制图像  
  35.                  *   image - 图像对象,可以来自 img 标签  
  36.                  *   sourceX - 截取源图像,相对于源图像的左上角的 x 坐标,  
  37.                  *   sourceY - 截取源图像,相对于源图像的左上角的 y 坐标,  
  38.                  *   sourceWidth - 截取源图像,需要截取的宽  
  39.                  *   sourceHeight - 截取源图像,需要截取的高  
  40.                  *   destX - 图像绘制到画布后的左上角的 x 坐标  
  41.                  *   destY - 图像绘制到画布后的左上角的 y 坐标  
  42.                  *   destWidth - 图像绘制到画布后的宽  
  43.                  *   destHeight - 图像绘制到画布后的高  
  44.                  *  
  45.                  */  
  46.                 ctx.drawImage(img, 0, 0); // 按图像原始大小显示到画布上  
  47.                 ctx.drawImage(img, 0, 0, 200, 200); // 显示图像到画布上,并指定其宽高  
  48.                 ctx.drawImage(img, 50, 0, 400, 100, 0, 300, 200, 50); // 截取源图像的一部分显示到画布上,并指定被截取部分显示时的宽和高  
  49.             }  
  50.             img.src = "http://www.w3.org/html/logo/downloads/HTML5_Logo_512.png";  
  51.             // img.src = "http://www.cnblogs.com/assets/html5_logo.png";  
  52.         }  
  53.         function clearIt() {  
  54.             ctx.clearRect(0, 0, 800, 600);  
  55.         }  
  56.     </script> 
  57. </body> 
  58. </html> 

#p#

3、呈现视频截图 | drawImage()canvas/media/video.html

  1. <!DOCTYPE HTML> 
  2. <html> 
  3. <head> 
  4.     <title>在 canvas 上呈现视频截图的 demo</title> 
  5. </head> 
  6. <body> 
  7.     <video id="video" width="400" height="240" src="http://ie.microsoft.com/testdrive/Graphics/VideoFormatSupport/big_buck_bunny_trailer_480p_high.mp4" controls preload="metadata"> 
  8.         您的浏览器不支持 video 标签  
  9.     </video>    
  10.     <br /> 
  11.     <canvas id="canvas" width="400" height="240" style="background-color: rgb(222, 222, 222)"> 
  12.         您的浏览器不支持 canvas 标签  
  13.     </canvas> 
  14.     <br /> 
  15.     <button type="button" onclick="drawIt();">在画布上呈现视频截图</button> 
  16.     <button type="button" onclick="clearIt();">清除画布</button> 
  17.     <script type="text/javascript"> 
  18.         var ctx = document.getElementById('canvas').getContext('2d');  
  19.         var video = document.getElementById('video');  
  20.         var timerId = -1;  
  21.         function drawIt() {  
  22.             clearIt();  
  23.             timerId = setInterval(drawVideo, 300);  
  24.             function drawVideo() {  
  25.                 if (!isNaN(video.duration)) {  
  26.                     /*  
  27.                      * context.drawImage() 的可绘制对象包括:HTMLImageElement, HTMLVideoElement, HTMLCanvasElement  
  28.                      *  
  29.                      * 呈现 video 对象的当前截图,其他参数说明详见 image.html  
  30.                      */  
  31.                     ctx.drawImage(video, 0, 0, 400, 240);  
  32.                 }  
  33.             }   
  34.         }  
  35.         function clearIt() {  
  36.             ctx.clearRect(0, 0, 400, 240);  
  37.             clearInterval(timerId);  
  38.         }  
  39.     </script> 
  40. </body> 
  41. </html> 

#p#

4、呈现其他画布 | drawImage()canvas/media/canvas.html

  1. <!DOCTYPE HTML> 
  2. <html> 
  3. <head> 
  4.     <title>在 canvas 上呈现其他 canvas 的 demo</title> 
  5. </head> 
  6. <body> 
  7.     <canvas id="canvas" width="300" height="300" style="background-color: rgb(222, 222, 222)"> 
  8.         您的浏览器不支持 canvas 标签  
  9.     </canvas> 
  10.     <br /> 
  11.     <canvas id="canvas2" width="300" height="300" style="background-color: rgb(222, 222, 222)"> 
  12.         您的浏览器不支持 canvas 标签  
  13.     </canvas> 
  14.     <br /> 
  15.     <button type="button" onclick="drawIt();">在画布上呈现其他画布</button> 
  16.     <button type="button" onclick="clearIt();">清除画布</button> 
  17.     <script type="text/javascript"> 
  18.         var ctx = document.getElementById('canvas').getContext('2d');  
  19.         var ctx2 = document.getElementById('canvas2').getContext('2d');  
  20.         function drawIt() {  
  21.             clearIt();  
  22.             var img = new Image();  
  23.             img.onload = function () {  
  24.                 ctx.drawImage(img, 0, 0, 300, 300);  
  25.                 /*  
  26.                  * context.drawImage() 的可绘制对象包括:HTMLImageElement, HTMLVideoElement, HTMLCanvasElement  
  27.                  *  
  28.                  * 呈现指定的 canvas 的当前图像,其他参数说明详见 image.html  
  29.                  */  
  30.                 ctx2.drawImage(document.getElementById('canvas'), 0, 0);  
  31.             }  
  32.             img.src = "http://www.w3.org/html/logo/downloads/HTML5_Logo_512.png";  
  33.             // img.src = "http://www.cnblogs.com/assets/html5_logo.png";  
  34.         }  
  35.         function clearIt() {  
  36.             ctx.clearRect(0, 0, 300, 300);  
  37.             ctx2.clearRect(0, 0, 300, 300);  
  38.         }  
  39.     </script> 
  40. </body> 
  41. </html> 

[源码下载]

原文链接:http://www.cnblogs.com/webabcd/archive/2012/02/16/2353563.html

责任编辑:张伟 来源: webabcd的博客
相关推荐

2012-05-30 15:17:54

HTML5

2012-05-30 14:51:09

HTML5

2012-05-31 09:19:22

HTML5

2012-05-31 09:54:13

HTML5

2012-05-31 10:57:06

HTML5

2012-05-30 13:26:12

HTML5

2012-05-30 13:49:52

HTML5

2012-05-30 10:52:09

HTML5

2012-05-30 11:11:42

HTML5

2012-05-30 13:17:46

HTML5

2009-11-17 17:31:58

Oracle COMM

2009-11-18 13:30:37

Oracle Sequ

2022-02-25 08:54:50

setState异步React

2011-07-04 10:39:57

Web

2021-03-16 08:54:35

AQSAbstractQueJava

2013-11-14 15:53:53

AndroidAudioAudioFlinge

2017-06-06 15:34:41

物联网数据库压缩

2017-06-05 14:50:33

大数据数据库压缩

2022-09-26 09:01:15

语言数据JavaScript

2012-02-07 15:29:17

Android核心组件Service
点赞
收藏

51CTO技术栈公众号