zoukankan      html  css  js  c++  java
  • HTML5 CANVAS制图 基础总结

    一、基本绘图

    首先,定义2D渲染变量ct(这里用了Jquery库):

    var ct = $(#canvasId).get(0).getContext('2d');

    以下是绘制各种基本图形的方法:

    //绘制矩形(填充/描框)
    ct.fillRect(x,y,w,h)
    ct.strokeRect(x,y,w,h)
    
    //绘制路径--线条
    ct.beginPath();
    ct.moveTo(x0,y0);
    ct.lineTo(x1,y1);
    ct.closePath();
    ct.stroke();
    
    //绘制路径--圆弧
    ct.beginPath();
    ct.arc(x,y,r,start,end,true);
    ct.closePath();
    ct.fill();
    
    //绘制文本
    ct.font = "30px serif...";
    ct.fillText(txt,x,y);
    ct.strokeText(txt,x,y);
    
    //设置样式
    ct.fillStyle = "rgb(r,g,b)";
    ct.strokeStyle = "rgb()";
    ct.lineWidth = 5;

    还提供了一些灵活的方法:

    //橡皮擦(擦除矩形范围)
    ct.clearRect(x,y,w,h);
    
    //重置样式
    canvas.attr("width",w);

    二、高级功能

    以下是对画布的一些变换操作:

    ct.save()/restore()  //保存/恢复
    ct.translate(x,y)    //平移
    ct.scale(a,b)        //放大、缩小
    ct.rotate(Math.PI)   //绕(0,0)旋转
    
    //变换矩阵
    ct.transform(xScale,ySkew,xSkew,yScale,xTrans,yTrans)   
    ct.setTransform(xScale,ySkew,xSkew,yScale,xTrans,yTrans) //重置

    关于变换矩阵,有一篇很好的文章可以加深你的理解:http://shawphy.com/2011/01/transformation-matrix-in-front-end.html

    这是些常用的操作:

    ct.globalAlpha = 0.5    //透明度
    
    //阴影
    ct.shadowBlur = 20;     //扩散
    ct.shadowOffsetX = 10;
    ct.shadowOffsetY = 10;
    ct.shadowColor = rgba;
    
    //渐变(线性/放射性)
    ct.createLinearGradient(x,y,x1,y1)
    ct.createRadialGradient(x,y,r,x1,y1,r1)
    //设渐变的始终颜色
    addColorStop(0,"rgb()")/(1,"rgb()");

    贝塞尔曲线绘制:

    //最后两个参数是终点的坐标点
    ct.beginPath();
    ct.moveTo(50,250);
    ct.quadraticCurveTo(250,100,450,250)     //两次贝塞尔曲线
    ct.bezierCurveTo(150,50,350,450,450,250) //三次贝塞尔曲线
    ct.stroke();

    画布导出为图像:

    //生成图片的src地址
    var imgURL = canvas.get(0).toDataURL();
    //以下将画布替换为图片
    var img = $("<img></img>");
    img.attr("src",imgURL);
    canvas.replaceWith(img);

    三、图片处理

    图片的引入和调整(图片的变换就是画布的变换,不再介绍):

    //引入图片
    var img = new Image();
    img.src = ".jpg";
    $(img).load(function(){
       ct.drawImage(参数);     
    })
    
    //图片调整
    ct.drawImage(image,x,y,w,h)
    //图片裁剪与调整,其中dx/dy/dw/dy为裁剪的参数
    ct.drawImage(image,dx,dy,dw,dh,x,y,w,h) 

    高级处理(关于图像像素的绘制和处理,仅供了解):

    //imgData对象
    var imgData = ct.getImageData(x,y,w,h)  //获取
     
    //imgData对象的属性
    imgData.width/height    //宽高
    imgData.data            //像素集合数组,表示rgba
    
    //创建图像
    var imgData = ct.createImageData(w,h)   
    ct.putImageData(imgData,x,y)

      至此,基础知识已经总结完了,不过以上仅仅是基本的静态画布制作而已,如果你懂得灵活应用javascript,结合canvas就可以制作出很漂亮的动画或游戏。这些应用已经很多了,感兴趣可以查找相关信息。

  • 相关阅读:
    Solr 规格严格
    createsimplepojoclassesbytecodeatruntimedynamically 规格严格
    Mongo 规格严格
    Java Classpath 规格严格
    ClassLoader 规格严格
    Lucene 规格严格
    封包和拆包
    NetBeans 时事通讯(刊号 # 25 Sep 11, 2008)
    安全注释和授权在 GlassFish 和 Java EE 5 SDK 中的应用
    Building Enterprise Applications for GlassFish using Netbeans IDE and Maven2
  • 原文地址:https://www.cnblogs.com/xinghh/p/3501943.html
Copyright © 2011-2022 走看看