SVG使用XML格式定义图像

SVG基础知识–使用XML格式定义图像

1. 什么是SVG?

  • 可伸缩矢量图形(Scalable Vector Graphics)
  • 用来定义用于网络的基于矢量的图形
  • 使用XML格式定义图形
  • 图像在放大或者改变尺寸不会损失图形质量
  • 万维网标准

2. SVG的优势?

  • 很多工具都可以读取修改(例如记事本)

  • 尺寸更小,压缩性更强(相比JP?EG,GIF)

  • 任何分辨率下都能高质量打印

  • 图像放大图像质量也不会下降

  • 适合制作地图–SVG中的文本是可选的、可搜索的

    SVG的只要竞争者是Flash。

3. SVG实例

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
	<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red"/>
</svg>
代码解释
  • 第一行包含了XML声明SVG。请注意 standalone 属性!该属性规定此 SVG 文件是否是“独立的”,或又对外部文件的引用,standalone="no"表示引用了外部文件,在这里的是 DTD 文件。
  • 第二和第三行引用了这个外部的 SVG DTD。该 DTD 位于“http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd”。该 DTD 位于 W3C,含有所有允许的 SVG 元素。
  • 代码以 <svg 元素开始,包括开启标签<svg和关闭标签。这是根元素。width和height属性可设置此SVG文档的宽度和高度version属性可定义所使用的 SVG 版本,xmlns 属性可定义 SVG 命名空间。
  • SVG的 用来创建一个圆,cx 和 cy 定义圆心坐标,不写默认是(0,0)。r是半径。
  • stroke和stroke-width属性控制如何显示形状的轮廓。我们把圆的轮廓设置为2px,黑边框。fill是填充颜色。

4. HTML中的SVG – 三种将SVG嵌入HTML的方法

  1. 使用标签 — 支持所有主流浏览器,并允许使用脚本
    • 注释:当在HTML页面中嵌入SVG时使用标签是Adobe(著名的图形图像和排版软件的生产商) SVG Viewer推荐的方法,如果创建合法的XHTML就不能使用。任何HTML规范中都没有。
    • 语法:
      <embed src="rect.svg" width="300" height="100" type="image/svg+xml" pluginspage="http://www.adobe.com/svg/viewer/install" /> // pluginspage属性指向下载插件的URL。
  2. 使用标签 — 支持较新的浏览器,但不支持脚本
    • 注释:如果你安装了最新的Adobe SVG Viewer,那么标签无法工作
    • 语法:
      <object data="rect.svg" width="300" height="100" type="image/svg+xml" codebase="http://www.adobe.com/svg/viewer/install/" /> // codebase属性指向下载插件的URL。
  3. 使用标签 — 支持大部分浏览器
    • 语法:
      <iframe src="rect.svg" width="300" height="100"></iframe>

5. SVG 形状

  • 矩形 <rect>
    
  • 圆形 <circle>
    
  • 椭圆 <ellipse>
    
  • 线 <line>
    
  • 折线 <polyline>
    
  • 多边形 <polygon>
    
  • 路径 <path>
    
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <rect width="200" height="100" x="20" y="20" rx="30" ry="30" feFlood style="fill:pink;stroke-width:10;
stroke:rgb(73, 168, 64);margin-top:20px; fill-opacity:0.5;stroke-opacity:0.9;" />
</svg>

在这里插入图片描述

1. style 属性用来定义 CSS 属性
2. CSS 的 fill 属性定义矩形的填充颜色(rgb 值、颜色名或者十六进制值)
3. CSS 的 stroke-width 属性定义矩形边框的宽度
4. CSS 的 stroke 属性定义矩形边框的颜色
5. x 属性定义矩形的左侧位置(例如,x="0" 定义矩形到浏览器窗口左侧的距离是 0px)
6. CSS 的 fill-opacity 属性定义填充颜色透明度(合法的范围是:0 - 1)
7. CSS 的 stroke-opacity 属性定义笔触颜色的透明度(合法的范围是:0 - 1)
8. CSS 的 opacity 属性定义整个元素的透明值(合法的范围是:0 - 1)
9. rx 和 ry 属性可使矩形产生圆角。

椭圆
1. cx 和 cy 属性定义圆点的 x 和 y 坐标。如果省略 cx 和 cy,圆的中心会被设置为 (0, 0)
2. rx,ry 属性定义椭圆水平/垂直半径
线
1. x1,y1 属性在 x/y 轴定义线条的开始
2. x2,y2 属性在 x/y 轴定义线条的结束
多边形
points 属性定义多边形每个角的 x 和 y 坐标

<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
    <polygon points="220,100 300,210 170,250" style="fill:#cccccc; stroke:#000000;stroke-width:1"/>
</svg>

折现

<svg width="100%" height="100%" version="1.1">
    <polyline points="10,10 20,20 20,30 30,40 40,40 40,60" style="fill:white;stroke:red;stroke-width:2"/>
</svg>

在这里插入图片描述

路径

注释:以下所有命令均允许小写字母。大写表示绝对定位,小写表示相对定位。

  • M = moveto --移至
  • L = lineto --画线
  • H = horizontal lineto --水平线
  • V = vertical lineto --垂直线
  • C = curveto --曲线
  • S = smooth curveto --平滑曲线
  • Q = quadratic Belzier curve --二次贝塞尔曲线
  • T = smooth quadratic Belzier curveto --光滑二次贝尔齐尔曲线
  • A = elliptical Arc --椭圆弧
  • Z = closepath --闭路
<svg width="100%" height="100%" version="1.1">
    <path d="M250 150 L150 350 L350 350 Z" />
</svg>

上面的例子,它开始于位置 250 150,到达位置 150 350,然后从那里开始到 350 350,最后在 250 150 关闭路径。

<svg width="100%" height="100%" version="1.1">
    <path d="M153 334
        C153 334 151 334 151 334
        C151 339 153 344 156 344
        C164 344 171 339 171 334
        C171 322 164 314 156 314
        C142 314 131 322 131 334
        C131 350 142 364 156 364
        C175 364 191 350 191 334
        C191 311 175 294 156 294
        C131 294 111 311 111 334
        C111 361 131 384 156 384
        C186 384 211 361 211 334
        C211 300 186 274 156 274"
        style="fill:white;stroke:red;stroke-width:2"/>
</svg>

例子如图所示⬇️。 由于绘制路径的复杂性,因此强烈建议您使用 SVG 编辑器来创建复杂的图形。
案例

SVG渐变

  • 可用来定义 SVG 的线性渐变。
    标签必须嵌套在 的内部。 标签是 definitions 的缩写,它可对诸如渐变之类的特殊元素进行定义。
    线性渐变可被定义为水平、垂直或角形的渐变:
  • 当 y1 和 y2 相等,而 x1 和 x2 不同时,可创建水平渐变
  • 当 x1 和 x2 相等,而 y1 和 y2 不同时,可创建垂直渐变
  • 当 x1 和 x2 不同,且 y1 和 y2 不同时,可创建角形渐变
<svg width="100%" height="100%" version="1.1">
    <defs>
        <linearGradient id="orange_red" x1="0%" y1="0%" x2="100%" y2="0%">
            <stop offset="0%" style="stop-color:rgb(255,255,0); stop-opacity:1"/>
            <stop offset="100%" style="stop-color:rgb(255,0,0); stop-opacity:1"/>
        </linearGradient>
    </defs>
    <ellipse cx="200" cy="190" rx="85" ry="55"  style="fill:url(#orange_red)"/>
</svg>

在这里插入图片描述

代码解释
标签的 id 属性可为渐变定义一个唯一的名称
fill:url(#orange_red) 属性把 ellipse 元素链接到此渐变
标签的 x1、x2、y1、y2 属性可定义渐变的开始和结束位置
渐变的颜色范围可由两种或多种颜色组成。每种颜色通过一个 标签来规定。offset 属性用来定义渐变的开始和结束位置。

— 垂直渐变 —

<svg width="100%" height="100%" version="1.1">
  <defs>
<linearGradient id="orange_red" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:rgb(255,255,0); stop-opacity:1"/>
<stop offset="100%" style="stop-color:rgb(255,0,0); stop-opacity:1"/>
</linearGradient>
  </defs>
  <ellipse cx="200" cy="190" rx="85" ry="55"  style="fill:url(#orange_red)"/>
</svg>

在这里插入图片描述

放射性渐变 – 用来定义放射性渐变。

**<radialGradient>标签必须嵌套在<defs>中。<defs>标签是definitions的缩写,它允许对诸如渐变等特殊元素进行定义。**
<svg width="100%" height="100%" version="1.1">
    <defs>
        <radialGradient id="grey_blue" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
            <stop offset="0%" style="stop-color:rgb(200,200,200); stop-opacity:0"/>
            <stop offset="100%" style="stop-color:rgb(0,0,255); stop-opacity:1"/>
        </radialGradient>
    </defs>
    <ellipse cx="230" cy="200" rx="110" ry="100" style="fill:url(#grey_blue)"/>
</svg>
        

在这里插入图片描述

代码解释
标签的 id 属性可为渐变定义一个唯一的名称,fill:url(#grey_blue) 属性把 ellipse 元素链接到此渐变,cx、cy 和 r 属性定义外圈,而 fx 和 fy 定义内圈 渐变的颜色范围可由两种或多种颜色组成。每种颜色通过一个 标签来规定。offset 属性用来定义渐变的开始和结束位置。

SVG元素

https://www.w3school.com.cn/svg/svg_reference.asp

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值