HTML5,Canvas画布

目录

前言

一、Canvas的基本用法

二、绘制图像

1.绘制线段

2.绘制三角形

3.绘制矩形

 4.绘制圆形

 5.绘制椭圆

6.绘制渐变效果 

 7.绘制文本

 8.绘制贝济埃曲线

9.其他

总结


前言

        canvas是H5中最受欢迎的功能,这个元素负责在页面中设定一个区域,然后就可以通过JS动态地在这个区域中绘制图形,甚至可以制作简单的动画。canvas元素最早由苹果公司推出,当时主要用在Dashboard微件中,很快H5加入了这个元素,主要浏览器也迅速开始支持它。


一、Canvas的基本用法

        <canvas id="app" width="400" height="400">浏览器不支持canvas</canvas>,由于一些老的浏览器不支持canvas,不支持的浏览器会执行 ‘浏览器不支持canvas’ ,支持的浏览器会渲染js中的 代码。

        width    设定绘图区域的宽
        height    设定绘图区域的高
        toDataURL() 使用该方法可以导出在canvas元素上绘制的图像,这个方法接受一个参数,为图像的MIME类型格式,而且适用于创建图像的任何上下文。

        用canvas元素绘制图形时,需要经过几道步骤:
    1) 取得canvas对象
        通过document.getElementById()等方法取得canvas对象。
    2) 取得上下文*(context)
        图形上下文是一个封装了很多绘图功能的对象。参数只能为”2d“
        var context = one.getContext("2d");
    3) 填充与绘制边框
        使用canvas元素绘制图形的时候,有两种方式:填充与绘制边框。填充是指填满图形内部;绘制边框是指不填充图形的内部,只绘制图形的边框。canvas元素结合使用者两种方式来绘制图形。
    4) 设定绘图样式
        在进行图形绘制的时候,首先要设定好绘图的样式,然后调用有关方法进行图形的绘制,所谓绘图的样式,主要是针对图形的颜色而言的。但不仅限于图形的颜色。
            fillStyle     填充的样式
            strokeStyle 图形边框的样式
    5) 指定线宽
        使用图形上下文对象lineWidth属性设置图形边框的宽度。
    6) 绘制矩形
        分别使用fileRect方法与strokeReck方法来填充矩形和绘制矩形边框
        context.fillRect(x,y,width,height);
        context.strokeRect(x,y,width,height);

二、绘制图像

1.绘制线段

beginPath(),开始绘制图形。

moveTo(),绘制开始的起点,用坐标表示。

lineTo(),绘制途中的落点,用坐标表示。

closePath(),闭合图形。

stroke(),绘制图形,之前是找点,运用这条语句将点连起来。

lineWidth   可以设置线宽。

stroke(),绘制边框图形。                strokeStyle,设置边框的样式。

fill(),绘制填充图形。                      fillStyle,设置填充的样式。

fillRect(),绘制填充矩形。              strokeRect(),绘制边框矩形。

arc(),绘制圆形。

ellipse(),绘制椭圆。

createLinearGradient(),绘制渐变。

fillText()    strokeText()   设置文本。

下面演示一下:

<canvas id="app" width="500" height="500"></canvas>
    <script>
        //1 获取canvas画布
        var app = document.querySelector('canvas');
        //2 获取上下文对象
        var context = app.getContext('2d');
        //3 绘制
        //3.1 设置绘制的样式
        context.strokeStyle = 'orange';
        //绘制线段
        //开始绘制
        context.beginPath();
        //起点
        context.moveTo(50,50);
        //落点
        context.lineTo(200,50);
        //绘制路径
        context.stroke();

        context.beginPath();
        context.lineTo(50,100);
        context.lineTo(200,100);
        context.closePath();
        context.stroke();
    </script>

 

        绘制线段的起点和落点没有分的太清楚,一直使用lineTo()也可以,也会绘制出图形,画线段可以不闭合图形,上面那条线段没有闭合,下面那条线段闭合了,没有太大的区别。

        在绘制完一个图形,开始绘制另一个图形时,必须要写beginPath(),重新开始绘制,否则会有一条线将两个图形连起来。就像下面这张图一样:

2.绘制三角形

        //在html代码中设置一块画布
        //1  获取canvas画布
        //2  获取画笔  上下文对象
        //3  绘制
        context.beginPath();
        //画三角形需要三个点
        context.moveTo(200,100);
        context.lineTo(250,200);
        context.lineTo(150,200);
        //边框三角形样式
        context.strokeStyle = 'teal';
        //设置线宽  像素
        context.lineWidth = '5';
        //闭合线路,画三角行必须要闭合
        context.closePath();
        context.stroke();

        //填充三角形样式
        context.beginPath();
        context.lineTo(200,210);
        context.lineTo(250,310);
        context.lineTo(150,310);
        //设置颜色  填充颜色
        context.fillStyle = 'teal';
        //闭合线路
        context.closePath();
        //绘制图形,  填充的样式
        context.fill();

         绘制三角形,找到三个点的坐标,运用closePath()语句闭合图形,会自动将三个点连接起来,学会绘制三角形,就能绘制多边形,只要找准每个点的坐标值。

3.绘制矩形

fillRect(x轴坐标,y轴坐标,长,宽),第一二个点是左上角那个点的坐标位置。

        //3.1 设置绘制的样式
        context.fillStyle = 'teal';
        context.strokeStyle = 'orange';
        //3.2 执行绘制   fillRect(x轴坐标,y轴坐标,长,宽)
        //填充样式  
        context.fillRect(10,10,100,100);
        //边框矩形
        context.strokeRect(10,120,300,100);

 4.绘制圆形

arc(圆心的x轴,圆心的y轴,半径,开始的弧度,结束的弧度,顺时针或逆时针旋转 Boolean类型顺时针为true----逆时针为false-----默认为true)

        //3 绘制
        //3.1 设置绘制的样式
        context.fillStyle = 'teal';
        context.strokeStyle = 'orange';

        //3.2 执行绘制  填充圆形
        context.beginPath();
        //arc(圆心的x轴,圆心的y轴,半径,开始的弧度,结束的弧度,顺时针或逆时针旋转)
        context.arc(200,100,50,0,Math.PI*2);
        context.fill();

        //边框形式
        context.beginPath();
        context.arc(150,150,100,Math.PI/3,Math.PI*2/3);
        context.stroke();

 5.绘制椭圆

ellipse(起点x,起点y,长轴(短轴),短轴(长轴),图像旋转角度,起始角,结束角)

        //3 绘制
        //3.1 设置绘制的样式
        context.fillStyle = 'teal';
        context.strokeStyle = 'orange';
        //绘制椭圆
        //ellipse(起点x,起点y,长轴(短轴),短轴(长轴),图像旋转角度,起始角,结束角)
        context.ellipse(230,160,80,100,10,Math.PI*2,0);
        //填充椭圆
        context.fill();
        //边框椭圆
        // context.stroke();

6.绘制渐变效果 

createLinearGradient(xstart,ystart,xend,yend)

                    xstart     渐变起点横坐标
                    ystart     渐变起点纵坐标
                    xend      渐变终点横坐标
                    yend      渐变终点纵坐标

addColorStop(0,'teal');

        第一个参数为所设定的颜色离开渐变起点的偏移量,该参数的值是一个范围在0~1之间的浮点值,渐变起始点的偏移量为0,渐变的结束点的偏移量为1。
       第二个参数为绘制时使用的颜色。
       由于是渐变,所以至少需要使用两次addColorStop方法以追加两个颜色(开始颜色和结束颜色)

        //填充样式
        //开始绘制
        context.beginPath();
        //线性渐变效果
        //createLinearGradient(xstart,ystart,xend,yend)
        var grad = context.createLinearGradient(10,10,300,300);
        grad.addColorStop(0,'teal');
        grad.addColorStop(1,'orange');
        context.fillStyle = grad;
        context.fillRect(10,10,300,100);

径向渐变:

         径向渐变是指沿着圆形的半径方向向外进行扩展的渐变方式。
            context.createRadialGradient(xstart,ystart,radiusStart,xend,yend,radiusend)
                前三个参数:圆的原心(x,y),以及半径
                后三个参数:终点圆的原心(x,y),以及半径
            如果想从某个形状的中心点开始创建一个向外扩散的径向渐变的效果,就要将两个圆定义为同心圆。

 7.绘制文本

        设置文字字体
                    顺序:style variant weight size family

                    font-style: 
                        规定字体样式。可能的值:normal,italic,oblique
                    font-variant:
                        规定字体变体。可能的值:normal,small-caps
                    font-weight     
                        规定字体的粗细。可能的值:normal,bold,bolder,lighter,100~900
                    font-size / line-height     
                        规定字号和行高,以像素计。
                    font-family     
                        规定字体系列

        serif         中文翻译为“衬线字体族”,具有末端加粗、扩张或尖细末端,或以实际的衬线结尾的一类字体。
        sans-serif     中文翻译为“无衬线字体族”。sans-serif 字体比较圆滑,线条粗线均匀,适合做艺术字、标题等
        cursive     中文翻译为“手写字体族”。顾名思义,这类字体的字就像手写的一样。
        fantasy     中文翻译为“梦幻字体族”。fantasy主要用在图片中,字体看起来很艺术,实际网页上用得不多。
        monospace     中文翻译为“等宽字体族”。我们知道英文中各字母是不等宽的,但用 monospace,各个字母就是等宽的了,就可以像中文一样排版了。

        //文本样式
        context.font = '100px fantasy';
        //填充样式
        context.fillText('Canvas',10,100);
        //边框样式
        context.strokeText('Canvas',10,200);

 8.绘制贝济埃曲线

quadraticCurveTo(cx,cy,x,y)    
            从上一点开始绘制一条二次曲线,到(x,y)为止,并且以(cx,cy作为控制点)

bezierCurveTo(c1x,c1y,c2x,c2y,x,y)
            从上一点开始绘制一条曲线,到(x,y)为止,并且以(c1x,c1y)和(c2x,c2y)为控制点

        context.strokeStyle = 'orange';
        context.bezierCurveTo(10,10,100,150,200,30);
        context.stroke();

 

9.其他

绘制变形图形
        1. 坐标变换
            绘制图形的时候,我们可能经常会想要旋转图形,或者对图形进行变形处理,使用Canvas API的坐标轴变换处理功能,可以实现这种效果。
            (1). 平移  context.translate(x,y)
                参数x为坐标原点向右移动的单位,参数y为坐标原点向下移动的单位。
            (2). 扩大  context.scale(x,y)
                参数x为水平方向的放大倍数,参数y为垂直方向放大的倍数,如果是缩小,将这两个参数设为0到1之间的数就可以了。
            (3). 旋转  rotate(angle)
                angle是指旋转的角度,旋转的中心点是坐标轴的原点,旋转是以顺时针方向进行的,要想逆时针旋转时,将angle设定为负数即可。
            (4). 状态的保存与恢复   save()        
                保存当前的绘图状态,save方法保存的绘图状态不仅包括当前坐标系统的状态,也包括CanvasRenderingContext2D所设置的填充风格,线条风格,阴影风格的各种绘图状态,但是save()方法不会保存当前Canvas上绘制的图形。
                restore()    恢复之前保存的绘图状态。

        矩阵变换等


总结

        介绍了canvas的一些基础用法。canvas是HTML的一个比较有趣的标签,还可以操作图片,它甚至可以做一些简单的动画,像钟表之类的,感兴趣的朋友可以自己尝试。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: HTML5 Canvas是一种用于绘制图形的Web API,可以用它来绘制各种形状、线条、文本和图像等。要绘制一个logo,可以先设计好logo的样式和颜色,然后使用Canvas API来实现。具体步骤包括:创建Canvas元素,设置Canvas的宽度和高度,获取Canvas的上下文对象,使用上下文对象绘制各种形状和文本,最后将Canvas元素插入到HTML页面中即可。绘制logo需要一定的设计和技术能力,需要不断尝试和调整才能得到满意的效果。 ### 回答2: Html5 Canvas是一项很有意思的技术,通过调用canvas的API来进行拉近、缩小、旋转、平移、变形等各种绘图效果的创作操作。在本次绘制Logo的任务中,我们需要通过这种技术来完成一个漂亮的Logo,下面就以一个实际绘制的案例来详解一下。 首先,我们可以在html中创建一个canvas标签,显示一个画布。“canvas”是HTML5中新加入的标签,用于绘制2D或3D图形,只需要在标签中定义画布的大小和高度等属性,就可以在上面自由的绘制。 接下来我们需要引用一些javascript库,比如jQuery、Snap.svg等。这些库可以简化我们的开发流程,并且提供了一些强大的绘图工具。 在绘制方面,我们需要将画布分为三个部分:中央部分、左侧部分和右侧部分。首先,在中央部分,我们需要绘制一个圆形,通过canvas提供的api,使用arc函数来绘制圆形,可以根据需要设置圆形的大小、颜色和边框等属性。接下来是左侧部分和右侧部分,我们需要绘制一些简单的线条和多边形图形,可以使用css或SVG实现。 最后,我们需要将这些位置合并在一起,达到最终的效果。通过CSS调整位置和字体,添加一些特殊的过渡效果和动画效果,实现一个独具风格的Logo设计。 绘制Logo时需要注意的是,在设计中,最好保留一定的空间留给用户进行绘图,比如将背景色设为白色或浅色。同时,也要考虑不同设备的屏幕分辨率和绘图的效果,确保Logo在不同设备上的显示效果都一致。此外,我们还可以增加一些特效,比如模糊、阴影、渐变和光影等,来营造出更加绚丽的视觉效果。 综上所述,html5 canvas绘图是一项多方面都需要考虑的技术,需要在技术、设计和用户体验等方面多方面的关注。只有在各个方面都考虑到位,才能达到最佳的绘图效果和用户体验。 ### 回答3: HTML5Canvas画布让网页设计者可以绘制出非常酷炫的图形,它提供了许多绘制路径、多种颜色和文本等功能。在Canvas中,最常见的是用来绘制各种形状的路径。除此之外,还可以使用图像和聚光灯效果创建各种动画效果,甚至可以在Canvas上面添加音频和视频元素。 绘制logo可以说是Canvas的重头戏,在这里,我们简单介绍几个Canvas绘制logo的方法。 一、使用图像绘制 如果你已经有了一个已经设计好的logo图像,你可以在Canvas上绘制这个图像。这是相对简单的方法,只需调用Canvas的drawImage()方法即可实现,在绘制成功后,可以对这个Canvas绘制的图像进行一些变换。 二、使用路径和填充绘制 如果你需要绘制一个比较复杂的图形,最好的选择就是使用路径和填充绘制。Canvas提供了一系列的绘制路径方法,可以绘制各种形状。通过路径和填充,你可以创建出一个虚实交错的图形,给人留下深刻的印象。 三、使用动画绘制 如果你想让你的Logo充满动态感,就可以使用Canvas的动画API,通过逐帧更新Canvas,使图形产生连续的动画效果。这个方法可以让你的Logo动感十足,让观众很难动过目不忘。 总结:在HTML5 Canvas画布上绘制Logo图案可以使用图像绘制、路径填充绘制和动画绘制这三种方式。如果你足够熟练的话,可以使用这三种方式组合起来,打造一款炫酷的Logo。无论是什么方法,实现漂亮的Logo都需要你有耐心和创造性,只有不断尝试,加强练习,才能创造出让人印象深刻的Logo。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值