【JavaScript高级程序设计】22、使用canvas绘图(1)

1、绘制图形

调用canvas的2d上下文进行绘画

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
    <title>我的第一个canvas界面</title>
</head>
<body>
    <script type="text/javascript">

        window.onload = function()
        {
            
            var drawing = document.getElementById("myCanvas");

            if(drawing.getContext)
            {
                //判断浏览器是否支持canvas,如果支持
                //绘制一个红色矩形
                var context = drawing.getContext("2d");

                context.fillStyle = "#ff0000";
                context.fillRect(10, 10, 300, 300);    //前两个是x,y坐标,后面是长与宽

                //绘制蓝色
                context.fillStyle = "rgba(0, 0, 255, 0.5)";
                context.fillRect(160, 160, 300, 300);
            }
            

            //myCanvas2
            var drawing2 = document.getElementById("myCanvas2");

            if(drawing2.getContext)
            {
                //判断浏览器是否支持canvas,如果支持
                //绘制一个红色矩形
                var context = drawing2.getContext("2d");

                context.strokeStyle = "#ff0000";
                context.strokeRect(10, 10, 300, 300);    //前两个是x,y坐标,后面是长与宽

                //绘制蓝色
                context.strokeStyle = "rgba(0, 0, 255, 0.5)";
                context.strokeRect(160, 160, 300, 300);
            }

            myCanvas3();
        }    


        function myCanvas3()
        {
            //myCanvas2
            var drawing = document.getElementById("myCanvas3");

            if(drawing.getContext)
            {
                //判断浏览器是否支持canvas,如果支持
                //绘制一个红色矩形
                var context = drawing.getContext("2d");

                context.fillStyle = "#ff0000";
                context.fillRect(10, 10, 300, 300);    //前两个是x,y坐标,后面是长与宽

                //绘制蓝色
                context.fillStyle = "rgba(0, 0, 255, 0.5)";
                context.fillRect(160, 160, 300, 300);

                //吧中间一部分空余出来
                context.clearRect(185, 185, 100, 100);
            } 
        }    

    </script>
    <!-- 设定画布的大小 -->
    <br/>
    <canvas id = "myCanvas" width="500" height="500">使用canvas</canvas>
    <canvas id = "myCanvas2" width="500" height="500">使用canvas</canvas>
    <canvas id = "myCanvas3" width="500" height="500">使用canvas</canvas>
    <br/>
</body>
</html>

 

 

显示:

 

2、绘制路径

 

 这里使用canvas的功能绘画一个钟表

 

<!DocType html>
<html>
<head>
    <meta charset="utf-8" />
    <title> 绘制路径 </title>
</head>
<body>
    <script type="text/javascript">

        window.onload = function()
        {
            canvas1();
            canvasNum();
        }

        function canvas1()
        {
            var drawing = document.getElementById("myCanvas1");
            //判断浏览器时候支持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.moveTo(100, 100);
                context.lineTo(35, 100);

                context.moveTo(100, 100);
                context.lineTo(100, 15);

                context.stroke();

            }
        }

        //绘制时针的数字
        function canvasNum()
        {
            var drawing = document.getElementById("myCanvas1");
            //判断浏览器时候支持canvas
            if(drawing.getContext)
            {
                var context = drawing.getContext("2d");

                //绘制四个方向上的数据
                context.font = "bold 14px Arial"; //字体,css
                context.textAlign = "center"; //居中
                context.textBaseline = "middle"; //垂直对齐方式
                context.fillText("12", 100, 20);
                context.fillText("3", 180, 100);
                context.fillText("6", 100, 180);
                context.fillText("9", 20, 100);

            }
        }

    </script>

    <canvas id = "myCanvas1" width = "500" height = "500"></canvas>
</body>
</html>

显示:

 

3、使用canvas调用图像数据

 这里把图案变成灰色,并在新的位置绘画出来

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>图片数据转化</title>
</head>
<body>
    <img id="smiley" src="eg_smile.gif" border="1" title="Image tag" />
    <br/>
    <canvas id="drawing" width="500" height="500">Your browser doesn't support the canvas tag.</canvas>

    <script type="text/javascript">

        window.onload = function()
        {
            imageData();
        }


        function imageData()
        {
            var drawing = document.getElementById("drawing");

            if (drawing.getContext)
            {
            
                var context = drawing.getContext("2d"),
                    image = document.images[0],
                    imageData, data,
                    i, len, average,
                    red, green, blue, alpha;
                

                context.drawImage(image, 0, 0);    
                
                imageData = context.getImageData(0, 0, image.width, image.height);
                data = imageData.data;

                for (i=0, len=data.length; i < len; i+=4)
                {
                
                    red = data[i];
                    green = data[i+1];
                    blue = data[i+2];
                    alpha = data[i+3]; //显示的而透明度
                    
                    //得到平均颜色度
                    average = Math.floor((red + green + blue) / 3);
                    
                    //这里其实是吧颜色设置为了灰白色
                    data[i] = average;
                    data[i+1] = average;
                    data[i+2] = average;
                    
                }
                
                //显示在x:100, y:100的位置
                imageData.data = data;                
                context.putImageData(imageData, 100, 100);
            }   
        }

    </script>

</body>
</html>

显示:

 

 

posted @ 2016-08-13 20:46  cutter_point  阅读(136)  评论(0)    收藏  举报