zoukankan      html  css  js  c++  java
  • svg

    SVG:

    使用svg中的图形元素,可以在HTML文件中嵌入,也可以将文件名改为xx.svg来使用。

    <svg width="300" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg"></svg>
    绘制区域的宽高,SVG版本,名称空间

    SVG中定义了7中元素:矩形<rect>、圆形<circle>、椭圆<ellipse>、线段<line>、折线<polyline>、多边形<poligon>、路径<path>
    1、矩形
    x: 矩形左上角x坐标
    y: 矩形左上角y坐标
    矩形宽度
    height: 矩形高度
    rx: 对于圆角矩形,指定椭圆在x方向的半径
    ry: 对于圆角矩形,指定椭圆在y方向的半径
    <svg width="500" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <!--矩形-->
    <rect x="20" y="20" width="200" height="100" style="fill:steelblue; stroke:blue; stroke-4; opacity:0.5"></rect>
    <!--圆角矩形-->
    <rect x="250" y="20" rx="20" ry="30" width="200" height="100" style="fill:steelblue; stroke:blue; stroke-4; opacity:0.5"></rect>
    </svg>

    2、圆形和椭圆形

    圆形:

    cx: 圆心x坐标

    cy: 圆心y坐标

    r: 半径

    椭圆参数与圆形类似,只是半径分为水平半径和垂直半径:

    cx: 圆心x坐标

    cy: 圆心y坐标

    rx: 椭圆水平半径

    ry: 椭圆垂直半径

    <svg width="500" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <!--圆形-->
    <circle cx="150" cy="150" r="50" style="fill:yellow; stroke:black; stroke-4"></circle>
    <!--椭圆-->
    <ellipse cx="350" cy="150" rx="100" ry="50" style="fill:yellow; stroke:black; stroke-4"></ellipse>
    </svg>

    3、线段

    线段的参数是起点和终点的坐标

    x1: 起点x坐标

    y1: 起点y坐标

    x2: 终点x坐标

    y2: 终点y坐标

    4、多边形和折线

    多边形和折线的参数是一样的,都只有一个points 参数,这个参数的值是一系列的点坐标。不同之处是多边形会将终点和起点连接起来,而折线不连接。

    <svg width="500" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <!--多边形-->
    <polygon points="100,20 20,90 60,160 140,160 180,90" style="fill:yellow; stroke:black; stroke-4"></polygon>
    </svg>
    <br>
    <svg width="500" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <!--折线-->
    <polyline points="100,20 20,90 60,160 140,160 180,90" style="fill:white;stroke:black; stroke-4" transform="translate(200,0)"></polyline>
    </svg>
    
    

     

    5、路径

    <path>功能最丰富,前面列举的图形都可以用路径制作出来。与折线类似,也是通过给出一系列坐标来绘制。在D3中绘制地图时,会经常用到此标签。

    用法是:给出一个坐标点,在坐标点前面添加一个英文字母,表示是如何运动到此点坐标点的。英文字母按照功能可分为5类:

    移动类

    M = moveto:将画笔移动到指定坐标

    直线类

    L = lineto:画直线到指定坐标

    H = horizontal lineto:画水平直线到指定坐标

    V = vertical lineto:画垂直直线到指定坐标

    曲线类

    C= curveto:画三次贝塞尔曲线经两个指定控制点到达终点坐标

    S = shorthand/smooth curveto:与前面一条三次贝塞尔曲线相连,第一个控制点为前一条曲线第二个控制点的对称点,只需输入第二个控制点和终点,即可绘制一个三次贝塞尔曲线

    Q = quadratic Bezier curveto:画二次贝塞尔曲线经过一个指定控制点达到终点坐标

    T = Shorthand/smooth quadratic bezier curveto:与前一条二次贝塞尔曲线相连,控制点为前一条二次贝塞尔曲线控制点的对称点,只需输入终点,即可绘制一个二次贝塞尔曲线

    A = elliptical arc:画椭圆曲线到指定坐标

    闭合类

    Z= closepath:绘制一条直线链接终点和起点,用来封闭图形

    上诉命令都是用大写英文字母表示,表示坐标系中的绝对坐标。也可用小写英文字母,表示的是相对坐标(相对当前画笔所在点)。

    <svg width="500" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <!--绘制直线,以下画了三条直线,都是用绝对路径,起点都是(30,100)。
    第一条画到(270,300),第二条水平画到(270,100),第三条垂直画到(30,300)。
    H和V都只需一个坐标值,如果输入两个,则使用后一个值。-->
    <path d="M30,100 L270,300
    M30,100 H270
    M30,100 V300"
    style="stroke:black; stroke-3"></path>
    </svg>

    <svg width="500" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <!--绘制三次贝塞尔曲线,C后接三个坐标,分别为两个控制点和终点;S后接两个坐标,分别为第二个控制点和终点。
    S会根据之前的曲线自动生成一个控制点。虚线的点是自动添加的控制点。-->
    <path d="M30,100 C100,20 190,20 270,100
    S400,180 450,100"
    style="fill:white; stroke:black; stroke-3"></path>
    </svg>

    <svg width="500" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <!--绘制二次贝塞尔曲线。-->
    <path d="M30,100 Q190,20 270,100
    T450,100"
    style="fill:white; stroke:black; stroke-3"></path>
    </svg>

    弧线是根据椭圆来绘制的,参数较多:
    A(rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y)
    rx: 椭圆x方向的半轴大小
    ry: 椭圆y方向的半轴大小

    x-axis-rotation: 椭圆x轴与水平轴顺时针方向的夹角
    large-arc-flag: 有两个值(1:大角度弧线, 0:小角度弧线)
    sweep-flag: 有两个值(1:顺时针至终点, 0:逆时针至终点)
    x: 终点x坐标
    y: 终点y坐标
    <svg width="500" height="400" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <!--.弧线,其中a表示相对坐标,当前画笔位置为(100,200),所以终点位置为(100+150, 200-150)即(250,50)。
    包含弧线的椭圆的x和y方向的半径分别为200和150,椭圆的x轴与水平轴方向夹角为0度,
    采用大角度、逆时针方向走向终点。Z表示闭合回路-->
    <path d="M100,200 a200,150 0 1,0 150,-150 Z"
    style="fill:yellow; stroke:black; stroke-3"></path>
    </svg>

    
    
     



    文字
    在SVG中可以用<text>标签绘制文字,属性如下:
    x: 文字位置的x坐标
    y: 文字位置的y坐标
    dx: 相对于当前位置在x方向上平移的距离(值为正则往右,负则往左)
    dy:相对于当前位置在y方向上平移的距离(值为正则往下,负则往上)
    textLength: 文字的显示长度(顺时针为正,逆时针为负)
    rotate: 旋转角度(顺时针为正,逆时针为负)

    <svg width="500" height="400" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <!--文字,在(200,150)位置,向左偏移5个单位,向下偏移5个单位,文字顺时针旋转180度,
    以文字长度为90度的方式绘制了文本“I love D3”。
    如果要对文字中某一部分文字单独定义样式,可使用<tspan>标签-->
    <text x="200" y="150" dx="-5" dy="5" textlength="90">I love <tspan fill="red">D3</tspan></text>
    </svg>

    样式
    SVG支持使用CSS选择器给元素定义样式。如:
    .linestyle{stroke: red; stroke-2;}
    在使用标签时,指定此样式:
    <line class="linestyle" x1="10" y1="10" x2="100" y2="100"/>
    也可以直接在元素中写样式,两种:
    单独写:<line fill="yellow" stroke="blue" stroke-width="4" x1="10" y1="10" x2="100" y2="100"/>
    合并写:<line style="fill:white;stroke:black;stroke-3" x1="10" y1="10" x2="100" y2="100"/>
    常见样式:
    fill: 填充色,改变文字<text>的颜色也用这个
    stroke: 轮廓线的颜色
    stroke- 轮廓线的宽度
    stroke-linecap: 线头断点的样式,圆角、直角等
    stroke-dasharray: 虚线的样式
    opacity: 透明度。0.0为完全透明, 1.0为完全不透明
    font-family: 字体
    font-size: 字体大小
    font-weight:字体粗细,有normal、bold、bolder、lighter可选
    font-style: 字体样式,斜体等
    text-decoratiion:上画线、下画线等


    标记
    标记(marker)是SVG一个重要概念,能贴附在<path>、<line>、<polyline>、<polygon>元素上。最经典的应用就是给线段添加箭头。标记<marker>写在<defs></defs>中,defs用在定义可重复利用的图形元素。
    <marker>的属性和意义:
    viewBox: 坐标系的区域
    refX,refY:在viewBox内的基准点,绘制时此点在直线端点上
    markerUnits:标记大小的基准,有两个值,即strokeWidth(线的宽度)和userSpaceOnUser(线前端的大小)
    markerWidth,markerHeight:标识的大小
    orient:绘制方向,可设定为auto(自动确认方向)和角度值
    id:标识的id号

    
    
    <svg width="500" height="400" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <!--在<marker>标记定义图形即可。下次调用这个标记,就会绘制标记里的图形-->
    <defs>
    <marker id="arrow"
    markerUnits="strokeWidth"
    markerwidth="12"
    markerheight="12"
    viewbox="0 0 12 12"
    refx="6"
    refy="6"
    orient="auto"
    >
    <path d="M2,2 L10,6 L2,10 L6,6 L2,2" style="fill:#000000;"></path>
    </marker>
    </defs>
    <!--下面分别绘制一条带箭头的直线和曲线.#arrow表示使用id为arrow的标记。
    设置的位置:marker-start:路径起始点处,marker-mid:路径中间端点处,marker-end:路径终点处。
    使用marker-mid,箭头将绘制在路径的节点处,因此对于只有起点和终点的直线<line>,使用marker-mid无效。-->
    <line x1="0" y1="0" x2="200" y2="50" stroke="red" stroke-width="2" marker-end="url(#arrow)"></line>
    <path d="M20,70 T80,100 T160,80 T200,90"
    fill="white" stroke="red" stroke-width="2"
    marker-start="url(#arrow)"
    marker-mid="url(#arrow)"
    marker-end="url(#arrow)">
    </path>
    </svg>




    滤镜
    滤镜(filter)能使图形更具有艺术效果。对原图使用滤镜能修改其显示效果。但是,滤镜不会改变原图形的数学参数,只是将其渲染后传送给显示设备。

    滤镜的标签<filter>,在<defs>中定义。种类很多,例如feMorphology、feGaussianBlur、feFood等,还有光学定义光源的滤镜feDistantLight、fePointLight、feSpotLight,都是fe开头的。
    <svg width="500" height="400" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <!--滤镜feGaussianBlur的用法。feGaussianBlur,一个高斯模糊滤镜。in是使用滤镜的对象,此处是原图形SourceGraphic。
    stddeviation是高斯模糊唯一参数,数值越大,模糊程度越高。-->
    <defs>
    <filter id="GaussianBlur">
    <feGaussianBlur in="SourceGraphic" stddeviation="2"></feGaussianBlur>
    </filter>
    </defs>
    <rect x="100" y="100" width="150" height="100"></rect>
    <rect x="300" y="100" width="150" height="100" filter="url(#GaussianBlur)"></rect>
    </svg>

    渐变

    有时需要在一个图形上使用渐变的颜色,渐变表示一种颜色平滑过渡到另一种颜色。SVG中有线性渐变<linearGradient>和放射性渐变<radialGradient>.

    渐变定义在<defs》标签中

    <svg width="500" height="400" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <!--线性渐变,x1、y1、x2、y2定义渐变的方向,此处是水平渐变。offset定义渐变开始的位置,stop-color定义此位置的颜色-->
    <defs>
    <linearGradient id="myGradient" x1="0%" y1="0%" x2="100%" y2="0%">
    <stop offset="0%" stop-color="#F00"></stop>
    <stop offset="100%" stop-color="#0FF"></stop>
    </linearGradient>
    </defs>
    <rect x="300" y="100" width="150" height="100" fill="url(#myGradient)"></rect>
    </svg>

    
    
    
    



  • 相关阅读:
    LeetCode "Palindrome Partition II"
    LeetCode "Longest Substring Without Repeating Characters"
    LeetCode "Wildcard Matching"
    LeetCode "Best Time to Buy and Sell Stock II"
    LeetCodeEPI "Best Time to Buy and Sell Stock"
    LeetCode "Substring with Concatenation of All Words"
    LeetCode "Word Break II"
    LeetCode "Word Break"
    Some thoughts..
    LeetCode "Longest Valid Parentheses"
  • 原文地址:https://www.cnblogs.com/skorzeny/p/6736583.html
Copyright © 2011-2022 走看看