zoukankan      html  css  js  c++  java
  • CANVAS画布与SVG的区别

    一,canvas画布···位图

      <canvas> 标签定义图形,比如说图表和其他图像,您必须使用脚本来绘制图形

        默认情况下 <canvas> 元素没有边框和内容。

        canvas 元素本身是没有绘图能力的。所有的绘制工作必须在 JavaScript 内部完成:

        * 不要在style中给canvas设置宽高 会有位移差

    二,svg···矢量图

      SVG 是使用 XML 来描述二维图形和绘图程序的语言

      SVG 指可伸缩矢量图形 (Scalable Vector Graphics)

      SVG 用来定义用于网络的基于矢量的图形

      SVG 使用 XML 格式定义图形

      SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失

      SVG 是万维网联盟的标准

      SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体

      SVG 代码以 <svg> 元素开始,包括开启标签 <svg> 和关闭标签 </svg> ---这是根元素

      SVG 要有一个根节点,叫svg标签,就相当于html

      SVG如果不设置大小,默认占用面积300*150

    canvas实例:

      1, 首先,找到 <canvas> 元素:

        var c1=document.getElementById('c1')

      2, 然后,创建 context 对象:

        var ctx=c1.getContext("2d");

      ------------------------------------------------------------------------------------------

      使用 JavaScript 来绘制图像

        * fillStyle() CSS颜色,渐变,或图案--- 默认设置是#000000(黑色)

        * fillRect(x,y,width,height) 方法定义了矩形当前的填充方式

        * strokeRect() 绘制带边框的方块

      ------------------------------------------------------------------------------------------

      Canvas - 路径

        画线-

          * moveTo(x,y) 定义线条开始坐标

          * lineTo(x,y) 定义线条结束坐标

          * stroke() 方法来绘制线条:

      ------------------------------------------------------------------------------------------

      rect() 绘制方块 没有颜色背景线条

      clearRect(X,Y,width,height) 清除画布

      一对方法:意思开始结尾写了里面的方法只对当前有效果

        save() 保存当前环境的状态。

        restore() 返回之前保存过的路径状态和属性。

      ------------------------------------------------------------------------------------------

      Canvas - 路径

        画圆- 

          * arc(x,y,半径,起始弧度,结束弧度,旋转方向) ----弧的圆形的三点钟位置是 0 度

            x,y 圆的中心的 x y坐标。

            起始弧度,结束弧度 以弧度计

            弧度和角度的关系:弧度 = 角度*Math.PI/180

            Math.PI=180°

            2*Math.PI=360°  

            旋转方向:顺时针(默认:false),逆时针(true)

          * beginPath() 绘画开始

          * closePath() 绘画结束

          * stroke() 绘制线条,定义路径

      ------------------------------------------------------------------------------------------

      画布的平移和旋转

        translate(x轴偏移,y轴偏移) 平移,画布的大小位置不变 起始坐标变了

        rotate(参数为弧度) 画布的旋转都是以(0,0)中心点旋转

        scale() 缩放 ---就是将画布向后移动,跟人的视距就变远了,近大远小

      ------------------------------------------------------------------------------------------

      画布中插入图片:

        * drawImage(image,x,y) 把一幅图像放置到画布上

      ------------------------------------------------------------------------------------------

      插入文字 :

        * font - 定义字体

        * fillText(text,x,y) - 在 canvas 上绘制实心的文本

        * strokeText(text,x,y) - 在 canvas 上绘制空心的文本

    svg实例

      <rect> 定义一个矩形 

          x="矩形的左上角的x轴"

          y="矩形的左上角的y轴"

          rx="x轴的半径(round元素)"

          ry="y轴的半径(round元素)" 

          width="矩形的宽度" 必需的

          height="矩形的高度" 必需的

          fill-opacity 只改变填充的透明度

          opacity 改变整体透明度  

       <circle> 定义一个圆 

           cx="圆的x轴坐标"

           cy="圆的y轴坐标"

           r="圆的半径" 必需


       <ellipse> 定义一个椭圆

           cx="椭圆x轴坐标"

           cy="椭圆y轴坐标"

           rx="沿x轴椭圆形的半径"。必需。

           ry="沿y轴长椭圆形的半径"。必需。

       <line> 定义一条线

          x1="直线起始点x坐标"

          y1="直线起始点y坐标"

          x2="直线终点x坐标"

          y2="直线终点y坐标"

       <polygon> 定义一个包含至少三边图形

            points="多边形的点。点的总数必须是偶数"。必需的。

            fill-rule="FillStroke演示属性的部分"

       <polyline> 定义只有直线组成的任意形状

            points=折线上的"点"。必需的。

       <path> 定义一个路径

          d="定义路径指令" 大写表示绝对定位,小写表示相对定位。

          pathLength="如果存在,路径将进行缩放,以便计算各点相当于此值的路径长度"

          transform="转换列表"

          下面的命令可用于路径数据:

              M = moveto 开始坐标

              L = lineto 结束坐标

              H = horizontal lineto 沿着x轴移动一段位置

              V = vertical lineto y 沿着y轴移动一段位置

              Z = closepath 关闭路径

              A = elliptical Arc 跟七个值

                A命令:

                  X半径 

                  Y半径 

                  角度 ---针对椭圆

                  弧长 ---1表示大角度弧线,0为小角度弧线

                  方向 ---1为顺时针,0为逆时针

                  X 终点坐标

                  Y 终点坐标

        <g> 用于把相关元素进行组合的容器元素

          g身上的属性,子元素都会继承,但是g上的属性都必须是显现属性,不是svg元素私有的;

          id="该组的名称"

          fill="该组填充颜色"

          opacity="该组不透明度"

        <text> 定义一个文本
           X 字体对于X的值,在字体的左下角

           Y 字体对于Y的值

           text-anchor=“middle” 居中

        <image> 定义图像

            x="图像的左上角的x轴坐标"

            y="图像的左上角的y轴坐标"

            width="图像的宽度". 必须.

            height="图像的高度". 必须.

            xlink:href="图像的路径". 必须.

        <use> 用于复制元素XY

           Xy相对于原始的元素坐标位置,不是相对于svg的(0,0)点的坐标

           使用URI引用一个<G>,<svg>或其他具有一个唯一的ID属性和重复的图形元素。

           复制的是原始的元素,因此文件中的原始存在只是一个参考。原始影响到所有副本的任何改变。

           x="克隆元素的左上角的x轴"

           y="克隆元素的左上角的y轴"

           width="克隆元素的宽度"

           height="克隆元素的高度"

           xlink:href="URI引用克隆元素"


        
    <animate> 随时间动态改变属性

             attributeName="目标属性名称"

             from="起始值"

             to="结束值"

             dur="持续时间"

             repeatCount="动画时间将发生" indefinite 无限次

        transform 准换svg中的一个属性,translate rotate scale

          平移,旋转,都是以起点(0,0)svg的左上角为参考点;

          css3中以元素的中心点为参考点

    Canvas 与 SVG 的比较

      下表列出了 canvas 与 SVG 之间的一些不同之处。

    Canvas

    • 依赖分辨率
    • 不支持事件处理器
    • 弱的文本渲染能力
    • 能够以 .png 或 .jpg 格式保存结果图像
    • 最适合图像密集型的游戏,其中的许多对象会被频繁重绘

    SVG

    • 不依赖分辨率
    • 支持事件处理器
    • 最适合带有大型渲染区域的应用程序(比如谷歌地图)
    • 复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快)
    • 不适合游戏应用
  • 相关阅读:
    To do list
    2020 上半学期比赛记录
    板子
    Project Euler 1~10 野蛮题解
    卡常火车头
    防止unordered_map 被卡方法
    2019 香港区域赛 BDEG 题解
    2019徐州区域赛 ACEFM 题解 & pollard-rho & miller-rabin & 求出每个子树的重心 板子
    BST-splay板子
    ZJOI2017(2) 游记
  • 原文地址:https://www.cnblogs.com/xiaotaiyangye/p/10901884.html
Copyright © 2011-2022 走看看