zoukankan      html  css  js  c++  java
  • canvas中剪辑、阴影以及曲线的绘制

    区域剪辑

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>canvas</title>
        <style>
            .canvas{border:1px solid #abcdef;background-color: #a9add2;}
        </style>
    </head>
    <body>
        <canvas class="canvas" id="canvas" width="600" height="400">您的浏览器不支持canvas</canvas>
    
        <script>
            var canvas=document.getElementById("canvas");
            var ctx=canvas.getContext("2d");//上下文,绘图环境
    
            //在矩形右上角绘制一个圆
            ctx.arc(300,100,200,0,2*Math.PI,true);
            //进行区域剪辑
            //后面绘制的所有图形都会在这个原型区域内绘制,超出部分被剪辑
            ctx.clip();
    
            ctx.fillStyle="pink";
            //绘制矩形
            ctx.fillRect(100,100,200,200);
           
        
        </script>
    </body>
    </html>

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>canvas</title>
        <style>
            .canvas{border:1px solid #abcdef;background-color: #a9add2;}
        </style>
    </head>
    <body>
        <canvas class="canvas" id="canvas" width="600" height="400">您的浏览器不支持canvas</canvas>
    
        <script>
            var canvas=document.getElementById("canvas");
            var ctx=canvas.getContext("2d");//上下文,绘图环境
    
            //在矩形右上角绘制一个圆
            ctx.arc(300,100,200,0,2*Math.PI,true);
            //进行区域剪辑
            //后面绘制的所有图形都会在这个原型区域内绘制,超出部分被剪辑
            ctx.clip();
    
            ctx.fillStyle="pink";
            //绘制矩形
            ctx.fillRect(100,100,200,200);
    
            //再绘制一个圆
            ctx.fillStyle="#abcdef";
            ctx.beginPath();
            ctx.arc(400,300,100,0,2*Math.PI,true);
            ctx.fill();
           
        
        </script>
    </body>
    </html>

    取消区域剪辑,使用save和restore

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>canvas</title>
        <style>
            .canvas{border:1px solid #abcdef;background-color: #a9add2;}
        </style>
    </head>
    <body>
        <canvas class="canvas" id="canvas" width="600" height="400">您的浏览器不支持canvas</canvas>
    
        <script>
            var canvas=document.getElementById("canvas");
            var ctx=canvas.getContext("2d");//上下文,绘图环境
    
            ctx.save();
    
            //在矩形右上角绘制一个圆
            ctx.arc(300,100,200,0,2*Math.PI,true);
            //进行区域剪辑
            //后面绘制的所有图形都会在这个原型区域内绘制,超出部分被剪辑
            ctx.clip();
    
            ctx.fillStyle="pink";
            //绘制矩形
            ctx.fillRect(100,100,200,200);
    
            ctx.restore();
            
            //再绘制一个圆
            ctx.fillStyle="#abcdef";
            ctx.beginPath();
            ctx.arc(400,300,100,0,2*Math.PI,true);
            ctx.fill();
           
        
        </script>
    </body>
    </html>

    绘制四色圆

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>canvas</title>
        <style>
            .canvas{border:1px solid #abcdef;background-color: #a9add2;}
        </style>
    </head>
    <body>
        <canvas class="canvas" id="canvas" width="600" height="400">您的浏览器不支持canvas</canvas>
    
        <script>
            var canvas=document.getElementById("canvas");
            var ctx=canvas.getContext("2d");//上下文,绘图环境
    
            //绘制一个圆
            ctx.arc(300,200,100,0,2*Math.PI,true);
            //进行区域剪辑
            //后面绘制的所有图形都会在这个原型区域内绘制,超出部分被剪辑
            ctx.clip();
    
            ctx.fillStyle="pink";
            //绘制矩形
            ctx.fillRect(200,100,300,200);
    
            ctx.fillStyle="lightgreen";
            //绘制矩形
            ctx.fillRect(300,100,400,200);
    
            ctx.fillStyle="#abcdef";
            //绘制矩形
            ctx.fillRect(200,200,300,300);
    
            ctx.fillStyle="orange";
            //绘制矩形
            ctx.fillRect(300,200,400,300);
           
        
        </script>
    </body>
    </html>

    阴影

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>canvas</title>
        <style>
            .canvas{border:1px solid #abcdef;background-color: #a9add2;}
        </style>
    </head>
    <body>
        <canvas class="canvas" id="canvas" width="600" height="400">您的浏览器不支持canvas</canvas>
    
        <script>
            var canvas=document.getElementById("canvas");
            var ctx=canvas.getContext("2d");//上下文,绘图环境
    
            ctx.fillStyle="pink";
            //阴影x轴偏移
            ctx.shadowOffsetX=10;
            //阴影y轴偏移
            ctx.shadowOffsetY=10;
            //阴影颜色
            ctx.shadowColor="rgba(0,0,0,.2)";
            //模糊程度
            ctx.shadowBlur=1;
            //绘制矩形
            ctx.fillRect(100,100,100,100);
    
        
        </script>
    </body>
    </html>

    文字阴影

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>canvas</title>
        <style>
            .canvas{border:1px solid #abcdef;background-color: #a9add2;}
        </style>
    </head>
    <body>
        <canvas class="canvas" id="canvas" width="600" height="400">您的浏览器不支持canvas</canvas>
    
        <script>
            var canvas=document.getElementById("canvas");
            var ctx=canvas.getContext("2d");//上下文,绘图环境
    
            ctx.fillStyle="pink";
            //阴影x轴偏移
            ctx.shadowOffsetX=10;
            //阴影y轴偏移
            ctx.shadowOffsetY=10;
            //阴影颜色
            ctx.shadowColor="rgba(0,0,0,.2)";
            //模糊程度
            ctx.shadowBlur=1;
            //绘制矩形
            ctx.fillRect(100,100,100,100);
            //绘制文字
            ctx.font="20px sans-serif";
            ctx.fillText("cyy呀",300,300);
    
        
        </script>
    </body>
    </html>

    补充一下,设置文字的大小,这个ctx.font中,必须要加字体

    我刚开始只是单纯设置了20px,发现是不生效的

    必须加上字体如sans-serif才可以

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>canvas</title>
        <style>
            .canvas{border:1px solid #abcdef;background-color: #a9add2;}
        </style>
    </head>
    <body>
        <canvas class="canvas" id="canvas" width="600" height="400">您的浏览器不支持canvas</canvas>
    
        <script>
            var canvas=document.getElementById("canvas");
            var ctx=canvas.getContext("2d");//上下文,绘图环境
    
            ctx.fillStyle="pink";
            //阴影x轴偏移
            ctx.shadowOffsetX=10;
            //阴影y轴偏移
            ctx.shadowOffsetY=10;
            //阴影颜色
            ctx.shadowColor="rgba(0,0,0,.2)";
            //模糊程度
            ctx.shadowBlur=1;
            //绘制矩形
            ctx.fillRect(100,100,100,100);
            //绘制文字
            ctx.font="20px sans-serif";
            ctx.fillText("cyy呀",300,300);
            ctx.fillText("小仙女",100,300);
    
        
        </script>
    </body>
    </html>

    绘制曲线

    圆弧的绘制 arc

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>canvas</title>
        <style>
            .canvas{border:1px solid #abcdef;background-color: #a9add2;}
        </style>
    </head>
    <body>
        <canvas class="canvas" id="canvas" width="600" height="400">您的浏览器不支持canvas</canvas>
    
        <script>
            var canvas=document.getElementById("canvas");
            var ctx=canvas.getContext("2d");//上下文,绘图环境
    
            ctx.arc(200,200,50,0,Math.PI/2,true);//逆时针
            ctx.stroke();
    
            ctx.beginPath();
            ctx.arc(400,200,50,0,Math.PI/2,false);//顺时针
            ctx.stroke();
    
        
        </script>
    </body>
    </html>

    二次贝塞尔曲线生成工具:

    http://blogs.sitepointstatic.com/examples/tech/canvas-curves/quadratic-curve.html

    三次贝塞尔曲线生成工具

    http://blogs.sitepointstatic.com/examples/tech/canvas-curves/bezier-curve.html

    二次贝塞尔曲线由三个点完成

     最左边的点对应的是moveTo的坐标

    中间的点对应的是quadraticCurveTo的第一个坐标点参数

    最右边的点对应的是quadraticCurveTo的第二个坐标点参数

    三次贝塞尔曲线由4个点完成

    最左边的点对应的是moveTo的坐标

    第一个柄对应的是quadraticCurveTo的第一个坐标点参数

    第二个柄对应的是quadraticCurveTo的第二个坐标点参数

    最右边的点对应的是quadraticCurveTo的第三个坐标点参数

  • 相关阅读:
    JDBC学习总结
    RAD,Eclipse切換界面語言(中日英)
    Eclipse生成EXE文件(可视化Login/读取文件)
    2019年10月 历史记录追加
    如何将eclipse的java导出成exe
    EAR、JAR、WAR(IT)
    Linux命令(IT)
    aarch64 cross compile 交叉编译 opencv
    cross compile vlc 播放器
    cross compile 交叉编译 ffmpeg
  • 原文地址:https://www.cnblogs.com/chenyingying0/p/12465967.html
Copyright © 2011-2022 走看看