zoukankan      html  css  js  c++  java
  • 突袭HTML5之Canvas 2D入门1 Canvas绘制文本和图像

    Canvas历史
      canvas是一个新的HTML元素,这个元素可以被脚本语言(通常是JavaScript)用来绘制图形。例如可以用它来画图、合成图象、或做动画。canvas最先在苹果公司(Apple)的Mac OS X Dashboard上被引入,而后被应用于Safari。后面被采用成为HTML5标准规范的一部分。这个元素的引入带来了非同凡响的影响:从此,浏览器原生支持图形绘制与动画了。canvas的引入,再加上Audio与Video的支持,HTML5必将带来网页游戏的蓬勃发展。
    Canvas基本属性
      canvas只有两个属性,width 和 height,两个都是可选的,并且都可以用DOM或者CSS来设置。如果不指定width和height,默认的值是宽300像素,高150像素。虽然可以通过 CSS 来调整canvas的大小,但渲染图像会通过缩放来适应布局的(如果你发现渲染结果看上去变形了,不必一味依赖CSS,可以尝试显式指定canvas的width和height属性值)。
      除此以外,像id这种标准HTML元素都可以指定的属性,canvas也可以使用。一般,为元素指定id 是个不错的方案,这样使得在脚本中应用更加方便。
      canvas元素可以像普通图片一样指定其样式(边距,边框,背景等等)。然而这些样式并不会对canvas实际生成的图像产生什么影响。如果不指定样式,canvas默认是全透明的。
    获取渲染上下文
      使用JS操作canvas的第一步就是获取渲染上下文。
      canvas创建的固定尺寸的绘图画面开放了一个或多个渲染上下文(rendering context),我们可以通过它们来控制要显示的内容。目前支持2D渲染(直接的API支持),3D渲染(通过WebGL实现的)。
      canvas初始是空白的,要在上面用脚本画图首先需要获得渲染上下文,它可以通过 canvas 元素对象的 getContext方法来获取。getContext()接受一个用于描述其类型的值作为参数。目前可用的参数值是"2d",也支持"webgl"(获得WebGL 3D渲染上下文,这个到总结WebGL的时候详细说明)。
      一般我们会辅助以DOM方法getElementById取得canvas对象的DOM节点。然后通过其getContext方法取得其画图操作上下文。如下所示:

    var canvas = document.getElementById('lesson01');
    var ctx = canvas.getContext('2d');

    但是为了安全起见,我们一般需要先判断浏览器是否支持cavas,也就是需要判断getContext是否存在。下面是完整的代码:

    var canvas = document.getElementById('lesson01');
    if (canvas.getContext){
      var ctx = canvas.getContext('2d');
      // drawing code here
    else {
      // canvas-unsupported code here
    }


    绘制文本
      绘制文本需要用到下列的属性和方法:
    context.font属性

    获取或设置文本的字体和大小。设置该属性的字符串语法与CSS语法中的font是一样的,不能解析成CSS的值会被忽略掉。
    context.textAlign属性

    获取或设置字体的对其方式。只允许下列值:start, end, left, right, 和center。其他值会被忽略,默认值是start。
    context.textBaseline属性

    获取或设置字体的基准线。有效的值如下:top, hanging, middle, alphabetic, ideographic, bottom。其他值会被忽略,默认值是alphabetic。

    context.fillText(text, x, y [, maxWidth ] )
    该方法用于在指定的位置绘制文本。如果设置了maxWidth,则会调整字符串使之符合这个条件。
    context . strokeText(text, x, y [, maxWidth ] )
    该方法用于在指定的位置绘制镂空的文本。
    例子如下:

    <!DOCTYPE HTML>  
    <html>  
    <body>  
    <canvas id="lesson" width="300"height="200">      
             <p>Your browser does not support the canvas element!</p>      
    </canvas>      
           
    <script type="text/javascript">      
      window.onload = function() {      
             var canvas =document.getElementById("lesson");      
             var context =canvas.getContext("2d");      
                  
             context.font ="30px Times New Roman";      
             context.fillText("HelloCanvas!", 10, 35);      
      }      
    </script>      
    </body>  
    </html>  


    绘制图片
      绘制图片可以有下面几种方式:
    绘制原图:context.drawImage(image, dx, dy)
    缩放绘图:context.drawImage(image, dx, dy, dw, dh)
    切片绘图:context.drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh)
      合理的绘制多幅图像可以做出漂亮的组合效果,比如常见的画廊就是框图片与照片的叠加,只不过要注意绘制的先后顺序。
    第一个参数image代表图片的来源,可以是下列几种:
    (1)页面内的图片:我们可以通过 document.images 集合、document.getElementsByTagName 方法又或者 document.getElementById 方法来获取页面内的图片。
    (2)已经完备的canvas:可以使用document.getElementsByTagName或document.getElementById方法来获取已经准备好的canvas元素。一个常用的场景就是为另一个大的canvas做缩略图。
    (3)通过data:url方式(http://en.wikipedia.org/wiki/Data:_URL)嵌入图像:Data urls允许用一串Base64编码的字符串的方式来定义一个图片。其优点就是图片内容即时可用,无须再到服务器兜一圈。(还有一个优点是,可以将CSS,JavaScript,HTML和图片全部封装在一起,迁移起来十分方便。)缺点就是图像没法缓存,图片大的话内嵌的url数据会相当的长。例如:

    var img_src = 'data:image/gif;base64,R0lGODlhCwALAIAAAAAA3pn/ZiH5BAEAAAEALAAAAAALAAsAAAIUhA+hkcuO4lmNVindo7qyrIXiGBYAOw=='; 

    (4)动态创建的图片:我们可以用脚本创建一个新的Image对象,但这种方法的主要缺点是如果不希望脚本因为等待图片装置而暂停,还得需要突破预装载。

    var img = new Image();   
    img.src = 'myImage.png'; 

    当脚本执行后,图片开始装载。若调用drawImage时,图片没装载完,脚本会等待直至装载完毕。如果不希望这样的效果,则需要使用图片的onload事件。(见下面的例子)

      其他几个参数的含义:sx,sy是Image在源中的起始坐标,sw/sWidth,sh/sHeight是源中图片的宽和高,dx,dy是在目标中的坐标,dw/dWidth,dh/dHeight是目标的宽和高。具体可以参看下图:

    例子如下:

    <?doctype html>
    <html>
    <head>
    <title>cavas tests</title>
    <script type="text/javascript">
     function onStart() {
      var canvas = document.getElementById("lesson01");
      if(canvas.getContext)
      {
       var context = canvas.getContext("2d");
       var pic = new Image();   
       pic.onload=function(){  
        context.drawImage(pic,0, 0); 
       } 
       pic.src = "http://imgsrc.baidu.com/forum/pic/item/e6b14bc2a4561b1fe4dd3b24.jpg";      
      }
    }
    </script>
    </head>
    <body onload="onStart();">
    <canvas id="lesson01" width="500" height="500">
     Your browser does not support Canvas.
    </canvas>
    </body>
    </html>

    实用参考:
    官方参考文档以及API详细说明:http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html
    权威开发入门:https://developer.mozilla.org/cn/Canvas_tutorial

  • 相关阅读:
    Mac-安装Git以及Git的配置
    Mac 安装Maven,并设置环境变量
    Mac Tab自动补全键
    Eclipse 代码快捷键模板(一)
    网易博客迁移(2011-05-27)
    前端JS插件整理
    Ajax请求二进制流并在页面展示
    IDE中使用System.getProperty()获取一些属性
    Spring Boot:快速入门(二)
    c 语言 指针 与地址
  • 原文地址:https://www.cnblogs.com/dxy1982/p/2359192.html
Copyright © 2011-2022 走看看