美文网首页js
Canvas 2D上下文

Canvas 2D上下文

作者: 张延伟 | 来源:发表于2016-08-03 22:03 被阅读550次

    1、要使用Canvas元素,必须设置其width和height属性,制定绘图区域大小
    2、要在这块画布上绘图,需要取得绘图上下文:通过调用getContext()方法并传入上下文名字。
    3、2D上下文getContext("2d"),坐标从左上角开始,width和height表示水平和垂直方向可用像素
    4、绘制矩形
    *fillRect(): *在画布上绘制矩形,通过fillStyle填充指定的颜色
    strokeRect(): 在画布上绘制矩形,通过strokeStyle指定颜色描边
    *clearRect(): *清楚画布上的矩形区域。本质:把绘制上下文中的某一矩形区域变透明。
    4个参数:矩形x坐标,y坐标,矩形宽度,高度

    <canvas id="drawing" width="200" height="200"></canvas>
        <script type="text/javascript">
            //获得Canvas元素
            var drawing = document.getElementById("drawing");
    
            //确定浏览器支持Canvas元素
            if(drawing.getContext){
                var context=drawing.getContext("2d");
    
                //绘制红色矩形
                context.fillStyle="red";
                context.fillRect(10,10,50,50);
    
                //绘制半透明的蓝色矩形
                context.fillStyle="rgba(0,0,255,0.3)";
                context.fillRect(30,30,50,50);
    
                //在两个矩形重叠的地方清除一个小矩形
                context.clearRect(40,40,10,10);
    
                //绘制黑色描边矩形
                context.strokeStyle="black";
                context.strokeRect(100,10,50,50);
    
                //半透明描边
                context.strokeStyle="rgba(0,0,255,0.5)";
                context.strokeRect(120,20,50,50);
            }
        </script>
    

    效果:

    代码效果
    5、绘制路径
    调用beginPath()方法,表示要开始绘制新的路径
    方法:
    arc(x,y,radius,startAngle,endAngle,true/false)
    以(x,y)为圆心绘制半径为radius的弧线,起始角度分别为startAngle,endAngle,true表示逆时针计算
    arcTo(x1,y1,x2,y2,radius)
    从上一点开始绘制弧线,到(x2,y2),半径为radius穿过(x1,y1)
    bezierCurveTo(c1x,c1y,c2x,c2y,radius)
    从上一点开始绘制一条曲线,到(x,y)为止,前面两个是控制点
    lineTo(x,y)
    从上一点开始绘制一条直线
    moveTo(x,y)
    将游标移动到(x,y),不画线
    quadraticCurveTo(cx,cy,x,y)
    从上一点开始绘制一条二次曲线,到(x,y)为止,并且以(cx,cy)作为控制点
    rect(x,y,width,height)
    从x,y开始绘制矩形路径:宽高width,height

    6、绘制文本
    方法:
    fillText():
    strokeText():
    参数:文本字符串、坐标
    属性:font文本样式大小字体、textAlign文本对齐方式、textBaseline文本基线

    7、变换
    方法:
    rotate(angle) : 围绕原点旋转图像angle弧度
    scale(scaleX,scaleY): 缩放图像,在x方向sscaleX,y方向scaleY,默认是1.0
    translate(x,y) 将坐标原点移动到(x,y)
    transfrom()
    setTransform()
    追踪上下文状态:
    save(): 保存当前状态
    restore(): 返回上一级状态

    <canvas id="drawing" width="200" height="200"></canvas>
        <script type="text/javascript">
            //获得Canvas元素
            var drawing = document.getElementById("drawing");
    
            //确定浏览器支持Canvas元素
            if(drawing.getContext){
                var context=drawing.getContext("2d");
    
                //开始路径
                context.beginPath();
    
                //绘制外圆
                context.arc(100,100,99,0,2*Math.PI,false);
    
                //绘制内圆
                context.moveTo(194,100);
                context.arc(100,100,94,0,2*Math.PI,false);
    
                //变换原点
                context.translate(100,100);
    
                //绘制文本
                context.font="bold 14px Arial";
                context.textAlign="center";
                context.textBaseline="middle";
                context.fillText("12",0,-85);//12
                context.fillText("3",85,0);//3
                context.fillText("6",0,85);//6
                context.fillText("9",-85,0);//9
    
                //旋转表针
                 context.rotate(0.5);
    
                //绘制分针
                context.moveTo(0,0);
                context.lineTo(0,-75);
    
                //绘制时针
                context.moveTo(0,0);
                context.lineTo(-65,0);
    
                //描边路径
                context.stroke();
            }
        </script>
    
    代码效果
    8、阴影
    属性:
    shadowColor:阴影颜色,默认黑
    shadowOffsetX:X轴方向阴影偏移量,默认0
    shadowOffsetY:y轴方向阴影偏移量,默认0
    shadowBlur:模糊像素
    <canvas id="drawing" width="200" height="200"></canvas>
        <script type="text/javascript">
            //获得Canvas元素
            var drawing = document.getElementById("drawing");
    
            //确定浏览器支持Canvas元素
            if(drawing.getContext){
                var context=drawing.getContext("2d");
    
                //设置阴影
                context.shadoeOffsetX=5;
                context.shadoeOffsetY=5;
                context.shadowBlur=4;
                context.shadowColor="rgba(0,0,0,0.9)";
    
                //绘制红色矩形
                context.fillStyle="red";
                context.fillRect(10,10,60,60);
    
                //绘制蓝色矩形
                context.fillStyle="blue";
                context.fillRect(30,30,60,60);
            }
        </script>
    
    代码效果

    9、渐变

    • 线性渐变
      createLinearGradient()参数:起点x坐标、起点y坐标、终点x坐标、终点y坐标,
    • 径向渐变
      createRadiaGradient()6参数:前三个参数,起点圆心坐标和半径,后三个参数,终点圆心坐标和半径
      想要达到向外扩散的渐变效果,就要将两个圆定义为同心圆
      创建渐变对象后,使用addColorStop()指定色标,参数:色标位置、颜色值。色标位置是一个从0-1之间的数字
    //创建线性渐变对象
    var gradient=context.createLinearGradient(10,10,60,60);
     //添加渐变颜色
     gradient.addColorStop(0,"white");
    gradient.addColorStop(1,"black");
    //绘制渐变矩形
    context.fillStyle=gradient;
    context.fillRect(10,10,50,50);
    

    PS:如果没有将举行绘制到恰当的位置,可能只会显示部分渐变效果

    //创建径向渐变对象
                var gradient2=context.createRadialGradient(55,55,10,55,55,30);
     //添加渐变颜色
     gradient2.addColorStop(0,"white");
    gradient2.addColorStop(1,"black");
    
     //绘制渐变矩形
     context.fillStyle=gradient2;
    context.fillRect(30,30,50,50);
    
    代码效果
    10、绘制图像
    方法:
    drawImage()
    9个完整参数:要绘制的图像、源图像的x坐标、源图像的y坐标、源图像的宽度、源图像的高度、目标图像的x坐标、目标图像的y坐标、目标图像的宽度、目标图像的高度。
    11、模式
    重复的图像,可用来填充或者描边图形
    方法:createPattern()
    方法参数1:HTML <img>元素
    参数2:如何重复,"repeat"、"repeat-x"、"repeat-y"、"no-repeat"
    var image=document.images[0],
      pattern=context.createPattern(image,"repeat");
    
      //绘制矩形
    context.fillStyle=pattern;
    context.fillRect(10,10,150,150);
    

    PS:
    a 从画布原点开始,将填充样式(fillStyle)设置为模式对象,只表示在某个特定的区域显示重复的图像。
    b createPattern()方法第一个参数也可是是一个<video>元素,或者另一个<canvas>元素。
    11、使用图像数据
    方法:getImageData()
    参数:要去的数据画面区域的x,y坐标以及宽度高度
    返回数据:ImageData对象,每个对象有三个属性width、height、data,data属性是一个保存着图像中每个像素的数据数组,每个像素用4个元素保存,分别是红、绿、蓝、透明度。
    数据可进行操作完成特定需要。

    12、合成
    属性
    globalAlpha:指定透明度
    plobalComposition:表示后绘制的图形怎样与线绘制的图形结合,字符串表示。

    相关文章

      网友评论

        本文标题:Canvas 2D上下文

        本文链接:https://www.haomeiwen.com/subject/olatsttx.html