svg听了很多遍了,一直没有机会好好地了解一下这是个什么东西,今天突然有兴趣,就好好看看吧~ 这篇文章主要参考的还是

w3school上的svg教程。

  

第一部分:简介

  svg就是scalable vector graphics, 即可伸缩矢量图形。 我们平时下载icon时,就会遇到是否选择svg格式的图片的情况,

  1. SVG 用来定义用于网络的基于矢量的图形。
  2. SVG 使用XML格式定义图形。
  3. 重要: SVG图像在放大或改变尺寸的情况下其图形质量不会损失! 厉害啦
  4. SVG 时万维网联盟的标准,与2003年1月14日成为w3c的推荐标准。
  5. SVG 与诸如DOM和XSL之类的W3C标准是一个整体。

  

  SVG图形的优势:

  1. SVG可以被许多的工具读取和修改,记事本都可以!
  2. SVG与jpg和gif图像比起来,尺寸更小,可压缩性更强。
  3. SVG在任何的分辨率下都可以被高质量的打印。
  4. SVG可以在图像质量不下降的情况下被放大。
  5. SVG文件时纯粹的XML。
  6. 所有的浏览器都支持SVG文件,不过需要安装插件的IE除外。

第二部分:实例

  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>

  我们把这些代码保存为.svg后缀的文件,然后点击在浏览器中打开即可

  可以发现svg的特点是,我们必须在浏览器打开,而不像传统的图片那样,可以在图片查看器中打开

  好了,我们看一下上面的代码在说什么吧(其实不难啊,主要是一堆固定的格式限制!)。

  1.  xml声明

<?xml version="1.0" standalone="no"?>

  第一行是在声明这是一个xml文件, 注意其中的standalone属性!该属性规定svg文件是否是独立的,standalone="no" 意味着 SVG 文档会引用一个外部文件 - 在这里,是 DTD 文件。

  

  2. 引入svg DTD文件

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

  这一句就是引入dtd文件,含有所有允许的 SVG 元素

  

  3. 添加根元素<svg>

<svg width="100%" height="100%" version="1.1"xmlns="http://www.w3.org/2000/svg"></svg>

  SVG代码一定要以<svg>元素开始,并且以</svg>元素结束。svg是根元素。

  width 和 height 属性可设置此 SVG 文档的宽度和高度。version 属性可定义所使用的 SVG 版本,xmlns 属性可定义 SVG 命名空间

   ok! 通过上面的工作,我们就把svg的基本工作做好了,下面就可以在其中绘图了。

   

  4. 添加内容<circle>

 <circle cx="100" cy="100" r="20" stroke="blue"stroke-width="2" fill="blue"/>

  这里只是添加了一个圆,如果希望添加其他的元素也是可以的, <circle>标签是在刚刚引入的dtd文件中定义好的,所以我们就可以直接使用了。

 其中cx是指 centerX 就是圆心的x坐标,那么cy就是圆心的y坐标,r就是圆的半径,stroke即描绘轮廓,fill即填充,stroke-width即描绘的宽度。

  完整的代码如下所示:

<?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="100" r="50" stroke="blue" stroke-width="3" fill="red"></circle>
</svg>

    可以看到svg的绘制轮廓和canvas非常的相似,同样有stroke 和 fill 方法,并且这是stroke-width还是挺棒的。 所以学过canvas的同学学习svg就会很快了!

  

  

第三部分:将svg引入html

  仅仅做出了svg图片还是没用呢,引进入才是王道啊! 下面就介绍几种引入svg的方法,包括使用<embed><object>或<iframe>

  第一种. 使用<iframe>引入

    这种方法是我在不看文档之前唯一可以想到的方式~   这个真的很简单,如下所示:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>svg_test</title>
</head>
<body><div class="wrap">下面是通过iframe引入的svg图片<div class="svg"><iframe src="./first.svg" width="200" height="200" frameborder="0"></iframe></div></div>
</body>
</html>

  最终效果如下所示:

  第二种: 使用<embed>标签引入

  注意:1. <embed> 标签被所有主流的浏览器支持,并允许使用脚本。

     2. 当在 HTML 页面中嵌入 SVG 时使用 <embed> 标签是 Adobe SVG Viewer 推荐的方法!然而,如果需要创建合法的 XHTML,就不能使用 <embed>。任何 HTML 规范中都没有 <embed> 标签

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>svg_test</title>
</head>
<body><div class="wrap">下面是通过embed标签引入的svg图片<div class="svg"><embed src="./first.svg" width="200" height="200"type="image/svg+xml"pluginspage="http://www.adobe.com/svg/viewer/install/" /></div></div>
</body>
</html>

  这种方法稍微复杂一些,因为我们需要记住type="image/svg+xml" 和 pluginspage="http://www.adobe.com/svg/viewer/install/"。 且这是Adobe公司的方法,并不推荐~

  第三种:使用<object>标签

    虽然<object>标签是HTML4规范中的标签,被所有较新的浏览器支持,但是它不能使用脚本!

    所以得通过codebase来指向下载插件的url实现。

    如下所示:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>svg_test</title>
</head>
<body><div class="wrap">下面是通过object标签引入的svg图片<div class="svg"><object data="./first.svg" width="200" height="200"type="image/svg+xml"codebase="http://www.adobe.com/svg/viewer/install/" /></div></div>
</body>
</html>

  最终的效果是相同的。 其实, 目前为止, iframe 引入的方式还是最简单的。

  还有一种方法我还不知道怎么使用~  戳这里

第四部分: 其他SVG形状的绘制

  之前作为例子我们展示了如何绘制一个圆型,就是引入一个<circle>标签,在这一部分我们将认识更多的图形。包括

  1. 矩形<rect>
  2. 圆形<circle>
  3. 椭圆<ellipse>
  4. 线<line>
  5. 折线<polyline>
  6. 多边形<polygon>
  7. 路径<path>

  

一、矩形<rect>

 矩形的使用和圆是差不多的,看下面的例子:

<?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 x="20" y="20" rx="20" ry="20" width="250"height="100" style="fill:red;stroke:black;stroke-width:5;opacity:0.5"/>
</svg>

  这里的x和css中的left是一样的,即距离浏览器左边的举例。 y就是距离浏览器上方的距离。 rx和ry可以创建圆角。

  width和height是用来限制rect的宽度和高度。

  fill 和 stroke 和 stroke-width 和opacity都是一些样式,我们可以全部写在style里,当然也可以向之前的圆都那么写,最后效果是一样的。

  注意:这里的opacity控制了fill和stroke的透明度,我们也可以使用stroke-opacity和fill-opacity来分别控制透明度。

二、圆形<circle>

  和我们之前讲的例子相同,不再重复。

  

三、椭圆<ellipse>

   椭圆和圆的区别很小,就是得记住这个英文ellipse啊,椭圆我们使用r即可确定其半径,但是我们需要在椭圆中限定rx和ry,即长半轴长和短半轴长,如下所示:

<?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"><ellipse cx="200" cy="200" rx="50" ry="80" fill="red" stroke="blue" stroke-width="2" fill-opacity="0.5"></ellipse><ellipse cx="120" cy="220" rx="50" ry="80" style="fill:pink;stroke:green; stroke-width:2; fill-opacity:0.2;"></ellipse>
</svg>

  值得注意的是: 在style里就是使用:来分隔了。

四、线<line>

  我们只要记住x1 、y1、x2、y2就可以了,分别代表起始和终止的两个点。如下所示:

<?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"><line x1="20" y1="20" x2="100" y2="100" stroke='red' stroke-width="2" ></line>
</svg>

  最终的效果如下所示:

  

五、折线<polyline>

   折线中只有一个API需要记住,那就是 points,points中可以有无数个点, 在每个点的x坐标和y坐标之间使用逗号隔开, 在一个坐标与另一个坐标之间用空格隔开即可,如下所示:

<?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"><polyline points="20,20 200,50 200,300 400,200 400,400 20,20" stroke="blue" stroke-width="1" fill="pink" fill-opacity="0.3" ></polyline>
</svg>

  最终效果如下所示:

  

六、多边形<polygon>

  多边形和折线的api是一样的,都是使用points,格式也是一样的。 如下所示:

<?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"><polygon points="20,20 200,50 20,50" stroke="blue" stroke-width="1" fill="pink" fill-opacity="0.3" ></polygon>
</svg>

  效果如下所示:

七、路径<path>

  在svg中,路径需要记住的api是比较多的。 下面的命令可用于路径数据:

  1. M = moveto
  2. L = lineto
  3. H = horizontal lineto
  4. V = vertical lineto
  5. S = smooth curveto
  6. Q = quadratic Belzier curve
  7. T = smooth quadratic Belzier curveto
  8. A = elliptical Arc
  9. Z = closepath

  上面的所有命令都允许使用小写字母大写表示绝对定位,小写表示相对定位。

  下面举一个简单的例子: 

<?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"><path d="M100 100 L200 200 L200 20 Z" fill="red"></path>
</svg>

  可以看出,svg的路径不需要使用,并且api不是points了,而是d, 首先moveto (100,100)然后lineto(200,200)然后lineto(200,200),最后再关闭路径即可。

 这怎么又是一个多边形啊,那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"><path d="M153 334C153 334 151 334 151 334C151339 153 344 156 344C164344 171 339 171 334C171322 164 314 156 314C142314 131 322 131 334C131350 142 364 156 364C175364 191 350 191 334C191311 175 294 156 294C131294 111 311 111 334C111361 131 384 156 384C186384 211 361 211 334C211300 186 274 156 274"   style="fill:white;stroke:red;stroke-width:2"/>
</svg>

  最终效果如下所示:

    虽然,这么多的数字只用到了C即curveTo,但是,这个也太复杂了吧~  

    官网上是这么说的 --- 由于绘制路径的复杂性,因此强烈建议您使用 SVG 编辑器来创建复杂的图形。

  

第五部分: SVG滤镜

  

更多svg实例点击这里。

  

svg --- 可缩放矢量图形相关推荐

  1. HTML5: SVG (可缩放矢量图形)

    ylbtech-HTML5: SVG (可缩放矢量图形) 可缩放矢量图形是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图形格式.它由万维网联盟制定,是一个开放标准. 1. ...

  2. SVG —— 基于XML语法的可缩放矢量图形

    SVG -- 基于XML语法的可缩放矢量图形 SVG Scalable Vector Graphics 可缩放的矢量图形,基于XML语法的可缩放矢量图形 JPG PNG canvas的图片都是位图,放 ...

  3. java fx svg 图像 缩放 控件_SVG(可缩放矢量图形)

    SVG可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式.SVG是W3C("World Wide Web C ...

  4. g标签 怎么设置svg_SVG(可缩放矢量图形)图片添加、高斯模糊、渐变与g标签

    今天主要谈一下SVG的特殊效果 其实和canvas都是差不多的,只不过是利用XML标签 用的不是很多但是以防以后万一用到还是整理一下 图片添加 svg中也可以添加图片 注意这里是image标签而不是我 ...

  5. svg 缩放_研究:可缩放矢量图形(SVG)

    矢量图形已广泛应用于印刷媒体中 . 在网站中,我们还可以使用SVG或可缩放矢量图形添加矢量图形. 根据W3.org的官方规范 ,SVG被描述为: 一种用于描述XML中的二维图形的语言. SVG支持三种 ...

  6. SVG(可缩放矢量图形)基本图形绘制方法与path路径命令

    tip:有问题或者需要大厂内推的+我脉脉哦:丛培森 ٩( 'ω' )و SVG(Scalable Vector Graphics)可缩放矢量图形 用于描述二维矢量图形的一种图形格式 很早之前SVG就出 ...

  7. java fx svg 图像 缩放 控件,支持调整SVG图像大小!Aspose.Imaging v19.11新功能示例演示!...

    Aspose.Imaging for .NET一种高级图像处理控件,允许开发人员创建,编辑,绘制或转换图像.图像导出和转换是API核心功能之一,它允许在不安装Photoshop应用程序或任何其他图像编 ...

  8. android 绘画笔迹回放_一种基于可缩放矢量图形的安卓平台笔迹回放方法及装置与流程...

    本发明涉及笔迹显示领域,更具体地,涉及一种基于可缩放矢量图形的安卓平台笔迹回放方法及装置. 背景技术: 智能移动设备平台上的回放技术已遍布许多安卓(Android)软件中,比如:字帖类软件,画图类软件 ...

  9. SVG可伸缩的矢量图形

    SVG可伸缩的矢量图形 SVG是对画该图形时的一些路径,做出精准的,必要的与分辨率无关的一种描述.即对矢量图的描述 在此安利一个svg绘图的网址,可以直接手动绘图,然后生成相关的svg描述,即可实现图 ...

最新文章

  1. L2-001 紧急救援-团体程序设计天梯赛GPLT
  2. WannaCry警示:学会检测和减轻云端恶意内容
  3. POJ3069:Saruman's Army
  4. 图卷积神经网络(part7)--PGC
  5. Spring源代码研究之how is Bean object created
  6. java 泛型调用方法调用_java – 如何使用泛型调用最具体的方法?
  7. sha256---利用java自带的实现加密
  8. .config 和 kconfig以及 makefile的关系
  9. Unity官网进不去?打不开?下载不了?
  10. 【Codeforces 851D Arpa and a list of numbers】
  11. Java软件工程师面试题:Java运行时异常与一般异常有什么不一样?
  12. SQL知识(浓缩版)快速入门(基础语法、概念)
  13. 国内外优秀程序员的博客全在这了,请查收
  14. 使用AT89C51芯片实现生日快乐歌
  15. Android Studio 默认keystore 以及自定义keystore
  16. Tableau数据分析数据可视化分析平台
  17. ADB读取和备份安卓应用数据(无Root)
  18. 读书笔记-全面薪酬体系设计“6+1”
  19. shell统计pv和uv、独立ip的方法
  20. 【免杀前置课——Windows编程】十、进程间通信(COPY_DATA通信,邮槽通信)、实现两进程通信(附代码)

热门文章

  1. 华为云WeLink:让智能办公行走云端
  2. 【Photoshop实用教程】如何用魔术棒工具替换背景?
  3. 什么是Teardrop攻击?我们要如何防御Teardrop攻击?
  4. mysql汉字对应字段_mysql和SqlServer 中取得汉字字段的各汉字首字母
  5. 我们看到的太阳是8分钟前的太阳
  6. 值得推荐好用的网址导航网站大全
  7. Writeback和Writethrough区别
  8. Check list of writing
  9. BZOJ3387栅栏(另一种解法:spfa)
  10. 使用jquery,按回车键实现tab键的功能