Canvas

作者: wulle__ | 来源:发表于2022-05-27 16:44 被阅读0次

<canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成
它只是图形容器,必须使用脚本来绘制图形。
可以通过多种方法使用 canvas 绘制路径,盒、圆、字符以及添加图像。

1.canvas基础设置:

<canvas id="myCanvas" width="200" height="100">当前浏览器版本太低,请升级浏览器</canvas>

标签通常需要指定一个Id属性 (脚本中经常引用), width 和 height 属性定义的画布的大小。

<script>
     var canvas = document.getElementById('canvas');  // 获取标签
     canvas.width = 200;  // 设置画布大小
     canvas.height = 100;

     var ctx = getContext('2d');    //创建局部环境
     ctx.beginPath();    //  开始绘制 (拿起画笔)
     ctx.lineWidth = 10;    // 设置划线的粗细
     ctx.strokeStyle = 'plum';   // 线的颜色
     ctx.moveTo(50, 50);  // 起始点坐标
     ctx.lineTo(50, 150);  //  途经点坐标(也可以是结束点)
     ctx.closePath();   // 闭合
     ctx.stroke();  // 绘制图形

    ctx.lineCap = 'round'; // 圆形键帽
    // ctx.lineCap = 'square';   // 矩形线帽

</script>

2. canvas 常见图形 圆、矩形

    ctx.strokeRect(0,0,400,300)       // 绘制矩形
    ctx.fillRect(400,400,400,300,'#ccc');    // 绘制带填充色的 矩形 

    ctx.beginPath();            // 绘制圆弧
    ctx.arc(300,300,100, 0, 360 * (Math.PI / 180));
    ctx.stroke();
   // ctx.arc( 圆心x,圆心 y,r,起始点和0度夹角 ,结束点和0度夹角,bool 绘制方向 false 默认顺时针);
   // 角度计算:Math.PI 相当于 π    
   // 1度 = Math.PI / 180   

3. 贝塞尔曲线:

 /* 绘制贝塞尔曲线 需要三个点
        1. 起始坐标点  使用 moveTo()
        2. 控制点     贝塞尔曲线的前两个参数 就是控制点的 x y    切线交点。
        3. 结束点     贝塞尔曲线的后两个参数

        ctx.moveTo(起始点,起始点)
        ctx.quadraticCurveTo(控制点,控制点,结束点,结束点); 
*/
    ctx.beginPath();
    ctx.moveTo(10, 200); //起始点
    var cp1x = 40, cp1y = 100;  //控制点
    var x = 200, y = 200; // 结束点
    //绘制二次贝塞尔曲线
    ctx.quadraticCurveTo(cp1x, cp1y, x, y);
    ctx.stroke();

4. Canvas 中文字的设置:

    // 1. 设置文字基本属性   // oblique 斜体 
    //    文字字体必须设置 否则不会正常展示
    ctx.font = "oblique 30px '微软雅黑'" 

    /*   2. 设置文字水平位置:
             left   起始点在文字左边
             right  起始点在文字右边
             center 起始点在文字中间
    */
    ctx.textAlign = 'left';
    /* 
        3. 设置文字纵向对齐方式 ----  常用值:
              alphabetic : 默认 根据字母基线对齐
              top : 文字顶端对齐
              middle : 文字中间对齐
              bottom : 文字底端对齐
              hanging : 悬挂基线
    */
    ctx.textBaseline = 'bottom';

     // 4. 绘制文字  
     // 绘制 实心 文字
     ctx.fillText('Hello Word1',300,200);
     // 绘制 空心 文字
     ctx.strokeText('Hello Word2',300,300);

5. 平移 和 旋转:

     // translate(x, y)   用来移动 canvas 的原点到指定的位置
     // translate 移动的是 canvas 的坐标原点(坐标变换)。

      ctx.save();  // 保存坐原点平移之前的状态
      ctx.translate(100, 100);
      ctx.strokeRect(0, 0, 100, 100)
      ctx.restore();  //  永远恢复最近一次的存档的坐标
      ctx.translate(220, 220);
      ctx.fillRect(0, 0, 100, 100)
     
      //  旋转45度  ctx.rotate(旋转角度);
    ctx.rotate( Math. PI / 180 * 45) );

6. Image 图片:

   // 图片绘制   ctx.drawImage(img,x,y,w,h);
   // 参数:DOM图片对象 , x 图左上角坐标 , y 图左上角坐标 ,w 图宽 ,h 图高
   var img = new Image();
   img.src = './shark1.png';
   var k = img.width / img.height;    // 计算原图宽高比
   ctx.drawImage(this, 0, 0, 200, 200 / k);   // 图片绘制
    /* 
       图片裁剪 
       ctx.drawImage(img,cx,cy,cw,ch,x,y,w,h);
       img,x,y,w,h 这五个参数 与 图片绘制时 参数一致

       cx 裁剪起点x
       cy 裁剪起点y
       cw 裁剪宽度     以原图大小为参照物
       ch 裁剪高度     以原图大小为参照物
   */
    ctx.drawImage(img , 0, 0, 510, 229, 0, 0, 510, 229);   //  图片裁剪

相关文章

网友评论

      本文标题:Canvas

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