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 334C153 334 151 334 151 334C151 339 153 344 156 344C164 344 171 339 171 334C171 322 164 314 156 314C142 314 131 322 131 334C131 350 142 364 156 364C175 364 191 350 191 334C191 311 175 294 156 294C131 294 111 311 111 334C111 361 131 384 156 384C186 384 211 361 211 334C211 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

SVG使用XML格式定义图像相关推荐

  1. svg怎么转换html格式,svg是什么格式

    svg是一种图像文件格式,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形.它是基于XML由World Wide Web Consortium(W3C)联盟进行开 ...

  2. COCO数据集数据转换为XML格式

    nanodet需要xml格式, 百度下载地址: coco2017数据集百度网盘链接_m0_37835084的博客-CSDN博客_coco数据集百度网盘 官方下载地址:https://cocodatas ...

  3. Objects365数据简介及数据转换为XML格式

    Objects365数据简介及数据转换为XML格式 注:Obj365和COCO数据集转换为xml格式以及转为yolo的txt格式,xml数据统计处理更改见GitHub:https://github.c ...

  4. Walkthrough: Word 2007 XML 格式

    本页内容 简介 Word 2007 文档包 Word XML格式的开放打包约定 解析Word 2007文件 确定Word 2007文档中的非XML部件 从文档中分离内容 理解数据存储 结论 简介 Mi ...

  5. QDAS转换器中间XML格式说明文档

    文章目录 整体要求 输出XML格式定义 附1:C# 写 XML 示例代码 附2:C# 读取XML代码 附3:整体结构 附4:测试用例文件要求 本文为QDAS(库道斯)转换器中间转换的格式说明.通过本转 ...

  6. python使用openCV加载图像、并将BGR格式转换成HSV格式、定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)、并使用mask信息进行颜色分离、BGR格式的图像转化为RGB、并可视化

    python使用openCV加载图像.并将BGR格式转换成HSV格式.定义HSV格式中需要分离颜色的掩码(掩模)区间(mask).并使用mask信息进行颜色分离.将BGR格式的图像转化为RGB.可视化 ...

  7. 将一个dcm格式的医学影像文件处理为一个png格式的图像和一个xml格式的文件

    将dcm格式的医学影像文件处理为png格式的图像和xml格式的文件可以使用转换工具来实现.可以使用如下方式: 使用 Python 库 pydicom 和 pillow 库读取 dcm 文件并转换成 p ...

  8. 如何操作 Office Open XML 格式文档

    摘要: Office Open XML格式文件代替了早期的二进制Office系统文件.本文档向您介绍了包含在一个格式化文档中的组件以及展示这些文件功能的一些场景 . Frank Rice,微软公司 适 ...

  9. 如何操作 Office Open XML 格式文档(转)

    原文地址为: 如何操作 Office Open XML 格式文档(转) 摘要: Office Open XML格式文件代替了早期的二进制Office系统文件.本文档向您介绍了包含在一个格式化文档中的组 ...

最新文章

  1. go标准库的学习-crypto/aes
  2. AI智能体学会动物进化法则:李飞飞等提出深度进化RL
  3. Flex4将对象转换成json串
  4. linux uname 命令详解
  5. AAAI Fellow 2019名单公布!罗杰波、刘欢等人入选
  6. tiny4412--linux驱动学习(2)
  7. postgresq dur_DUR的完整形式是什么?
  8. 字节字符区别Java_【JAVA基础】字符数组与字节数组的区别
  9. JDBC中使用preparedStatement防止SQL注入
  10. Sqlserver2012 根据数据库mdf文件生成log文件,解决无法附加mdf文件
  11. Luogu 4069 [SDOI2016]游戏
  12. java excel 2007兼容包_Microsoft Office 2007兼容包
  13. tracert工作原理
  14. 两个9014三极管简易开关电路分析
  15. 对接app 微信登录,QQ登录流程(php)
  16. 交叉谱分析——Python
  17. python中rjust用法_python中rjust的用法
  18. windows调整窗口大小_175 Windows 7调整,提示和操作方法文章
  19. oracle访问控制策略查看,ORACLE 安全访问策略VPD与ORA-28132
  20. 你了解Java应用开发中的注入攻击吗?

热门文章

  1. JAVA 生成树结构
  2. 什么是ChinaNet,ChinaNet介绍
  3. php二次跳转,discuz二次开发笔记(二)------跳转函数运用,discuz二次开发_PHP教程...
  4. ls-gl安装ssh
  5. crontab的定时操作
  6. Allegro 中手动制作螺丝孔封装
  7. 从技术经理的角度算一算,如何可以多快好省的做个app(转)
  8. C++处理日期和时间的chrono库
  9. 2023java面试题47道选择题及答案[来看看你能做对多少!!!]
  10. 计算机游戏2018,2018电脑离线游戏排行榜……