1、背景

SVG是Scalable Vector Graphics的缩写,意为可缩放矢量图形。1998年,万维网联盟成立了一个工作组,研发一种通过 XML来表现矢量图形的技术——SVG!由于SVG也是一种XML文件,所以SVG也继承了XML的开放性、可移植性和交互性的优点。如今几乎所有主流的 浏览器都支持SVG,大家可以从这里得到更多的兼容信息,其中包括:

  • 使用<embed>或者<object>元素来显示基本的SVG图形;
  • 使用<img>来显示SVG图形;
  • 将SVG图形应用为CSS背景图;
  • 直接在HTML文档中使用<svg>标签(需要HTML5支持);
  • 对使用CSS或者外部对象元素的HTML元素使用SVG变换、滤镜等特效;
  • 对SVG对象使用类似photoshop的效果,包括模糊和色彩处理;
  • 对SVG图像使用动画;
  • 使用SVG格式的字体;

2、图形系统

目前在计算机上主要有两种形式来表现图形,一种是栅格图形,另一种是矢量图形。

2.1 栅格图形

在栅格图形中,图像用像元或者像素的矩形阵列来表示,每个像素代表一个RGB颜色值或者是一个指向颜色列表的索引。通常以一种压缩格式来存储(如JPEG, GIF, PNG等),由于现在大部分的显示设备都是栅格设备,所以显示这些图形只需要做解压处理就可以了。

2.2 矢量图形

在矢量图形系统中,图形被描述为一些列的形状,它是特定坐标的集合。显示矢量图形需要按照特定的命令来绘制这些坐标,然后显示在屏幕上。矢量图形是对象,而不是一系列的像素。它们可以改变颜色、形状还有大小,图形中的文字都是可以被检索的,这些与栅格图形都有很大的不同。

2.3 为什么要使用矢量图形

绝大部分情况下,我们都在使用栅格图形,而且创建栅格图形的工具更容易获得和使用。但是矢量图形有一个栅格图形无法替代的优势:无论如何的缩放,矢量图形都不会失真。这使得当我们需要具有精确测量以及看清图形细节的放大能力时,矢量图形显得尤其重要。

3、创建一个SVG图形

下面首先创建一个SVG图形,这里我并不会详细的讲解各个标签,只是先给一个感性的认识,随后的章节会对SVG的语法做详细的介绍。看代码:

  1. 1 <?xml version="1.0"?>
  2. 2 <!DOCTYPE svg PUBLIC "//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
  3. 3 <svg width="140" height="170" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
  4. 4 <title>cat</title>
  5. 5 <desc>Stick Figure of a Cat</desc>
  6. 6 <circle cx="70" cy="95" r="50" style="stroke: black; fill: none;"/>
  7. 7 <circle cx="55" cy="80" r="5" style="stroke: black; fill: #339933"/>
  8. 8 <circle cx="85" cy="80" r="5" style="stroke: black; fill: #339933"/>
  9. 9 <g id="whiskers">
  10. 10 <link x1="75" y1="95" x2="135" y2="85" style="stroke: black;"/>
  11. 11 <link x1="75" y1="95" x2="135" y2="105" style="stroke: black;"/>
  12. 12 </g>
  13. 13 <use xlink:href="#whiskers" transform="scale(-1,1) translate(-140,0)" />
  14. 14 <!-- ears -->
  15. 15 <polyline points="108 62, 90 10,70 45, 50 10, 32 62" style="stroke: black; fill: none;" />
  16. 16 <!-- mouth -->
  17. 17 <polyline points="35 110, 45 120, 95 120, 105 110" style="stroke: black; fill: none;" />
  18. 18 <!-- nose -->
  19. 19 <path d="M 75 90 L 65 90 A 5 10 0 0 0 75 90" style="stroke: black; fill: #ffcccc;" />
  20. 20 <text x="60" y="165" style="font-family:sans-serif; font-size:14pt;">
  21. 21 Cat
  22. 22 </text>
  23. 23 </svg>

可能大家已经看出来了,这实际上是一个标准的XML文件,在浏览器中浏览,会看到一只猫的图案,如下图:

另外,由于很多人习惯了HTML5式的文档模式,即

  1. 1 <!DOCTYPE HTML>
  2. 2 <html lang="en-US">
  3. 3 <head>
  4. 4 <meta charset="UTF-8">
  5. 5 <title></title>
  6. 6 </head>
  7. 7 <body>
  8. 8
  9. 9 </body>
  10. 10 </html>

将命令空间省略,这里强烈的建议写SVG的时候保留命名空间,即

  1. xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"

后面你会看到因为忽略命令空间而引发的异常。

4、应用SVG图形

如何才能够在HTML文档中引入SVG呢?一般有一下几种方法

  • 包含在<svg>标签内部

  这是一种最直接的方法,但是需要浏览器支持HTML5中的<svg>标签,如:

  1. 1 <!DOCTYPE HTML>
  2. 2 <html lang="en-US">
  3. 3 <head>
  4. 4 <meta charset="UTF-8">
  5. 5 <title>SVG DEMO</title>
  6. 6 </head>
  7. 7 <body>
  8. 8 <svg width="140" height="170">
  9. 9 <title>cat</title>
  10. 10 <desc>Stick Figure of a Cat</desc>
  11. 11 <circle cx="70" cy="95" r="50" style="stroke: black; fill: none;"/>
  12. 12 <circle cx="55" cy="80" r="5" style="stroke: black; fill: #339933"/>
  13. 13 <circle cx="85" cy="80" r="5" style="stroke: black; fill: #339933"/>
  14. 14 <g id="whiskers">
  15. 15 <link x1="75" y1="95" x2="135" y2="85" style="stroke: black;"/>
  16. 16 <link x1="75" y1="95" x2="135" y2="105" style="stroke: black;"/>
  17. 17 </g>
  18. 18 <use xlink:href="#whiskers" transform="scale(-1,1) translate(-140,0)" />
  19. 19 <!-- ears -->
  20. 20 <polyline points="108 62, 90 10,70 45, 50 10, 32 62" style="stroke: black; fill: none;" />
  21. 21 <!-- mouth -->
  22. 22 <polyline points="35 110, 45 120, 95 120, 105 110" style="stroke: black; fill: none;" />
  23. 23 <!-- nose -->
  24. 24 <path d="M 75 90 L 65 90 A 5 10 0 0 0 75 90" style="stroke: black; fill: #ffcccc;" />
  25. 25 <text x="60" y="165" style="font-family:sans-serif; font-size:14pt;">Cat</text>
  26. 26 </svg>
  27. 27 </body>
  28. 28 </html>
  • 通过<embed>或者<object>标签嵌入

  其中DEMO1.svg是先前创建的SVG文件。

  1. 1 <!DOCTYPE HTML>
  2. 2 <html lang="en-US">
  3. 3 <head>
  4. 4 <meta charset="UTF-8">
  5. 5 <title>SVG DEMO</title>
  6. 6 </head>
  7. 7 <body>
  8. 8 <embed src="DEMO1.svg" type="image/svg+xml" width="140" height="170">
  9. 9 <object data="DEMO1.svg" type="image/svg+xml" width="140" height="170"></object>
  10. 10 </body>
  11. 11 </html>
  • 通过<img>标签的src属性
  1. 1 <!DOCTYPE HTML>
  2. 2 <html lang="en-US">
  3. 3 <head>
  4. 4 <meta charset="UTF-8">
  5. 5 <title>SVG DEMO</title>
  6. 6 </head>
  7. 7 <body>
  8. 8 <img src="DEMO1.svg" width="140" height="170" alt="">
  9. 9 </body>
  10. 10 </html>
  • 通过CSS:background: url(...)
  1. 1 <!DOCTYPE HTML>
  2. 2 <html lang="en-US">
  3. 3 <head>
  4. 4 <meta charset="UTF-8">
  5. 5 <title>SVG DEMO</title>
  6. 6 <style type="text/css">
  7. 7 #cat{
  8. 8 width: 140px;
  9. 9 height: 170px;
  10. 10 background: url(DEMO1.svg) no-repeat;
  11. 11 }
  12. 12 </style>
  13. 13 </head>
  14. 14 <body>
  15. 15 <div id="cat"></div>
  16. 16 </body>
  17. 17 </html>

所有的方法都产生同样的结果,如上图所示。

1、背景

SVG是Scalable Vector Graphics的缩写,意为可缩放矢量图形。1998年,万维网联盟成立了一个工作组,研发一种通过 XML来表现矢量图形的技术——SVG!由于SVG也是一种XML文件,所以SVG也继承了XML的开放性、可移植性和交互性的优点。如今几乎所有主流的 浏览器都支持SVG,大家可以从这里得到更多的兼容信息,其中包括:

  • 使用<embed>或者<object>元素来显示基本的SVG图形;
  • 使用<img>来显示SVG图形;
  • 将SVG图形应用为CSS背景图;
  • 直接在HTML文档中使用<svg>标签(需要HTML5支持);
  • 对使用CSS或者外部对象元素的HTML元素使用SVG变换、滤镜等特效;
  • 对SVG对象使用类似photoshop的效果,包括模糊和色彩处理;
  • 对SVG图像使用动画;
  • 使用SVG格式的字体;

2、图形系统

目前在计算机上主要有两种形式来表现图形,一种是栅格图形,另一种是矢量图形。

2.1 栅格图形

在栅格图形中,图像用像元或者像素的矩形阵列来表示,每个像素代表一个RGB颜色值或者是一个指向颜色列表的索引。通常以一种压缩格式来存储(如JPEG, GIF, PNG等),由于现在大部分的显示设备都是栅格设备,所以显示这些图形只需要做解压处理就可以了。

2.2 矢量图形

在矢量图形系统中,图形被描述为一些列的形状,它是特定坐标的集合。显示矢量图形需要按照特定的命令来绘制这些坐标,然后显示在屏幕上。矢量图形是对象,而不是一系列的像素。它们可以改变颜色、形状还有大小,图形中的文字都是可以被检索的,这些与栅格图形都有很大的不同。

2.3 为什么要使用矢量图形

绝大部分情况下,我们都在使用栅格图形,而且创建栅格图形的工具更容易获得和使用。但是矢量图形有一个栅格图形无法替代的优势:无论如何的缩放,矢量图形都不会失真。这使得当我们需要具有精确测量以及看清图形细节的放大能力时,矢量图形显得尤其重要。

3、创建一个SVG图形

下面首先创建一个SVG图形,这里我并不会详细的讲解各个标签,只是先给一个感性的认识,随后的章节会对SVG的语法做详细的介绍。看代码:

  1. 1 <?xml version="1.0"?>
  2. 2 <!DOCTYPE svg PUBLIC "//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
  3. 3 <svg width="140" height="170" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
  4. 4 <title>cat</title>
  5. 5 <desc>Stick Figure of a Cat</desc>
  6. 6 <circle cx="70" cy="95" r="50" style="stroke: black; fill: none;"/>
  7. 7 <circle cx="55" cy="80" r="5" style="stroke: black; fill: #339933"/>
  8. 8 <circle cx="85" cy="80" r="5" style="stroke: black; fill: #339933"/>
  9. 9 <g id="whiskers">
  10. 10 <link x1="75" y1="95" x2="135" y2="85" style="stroke: black;"/>
  11. 11 <link x1="75" y1="95" x2="135" y2="105" style="stroke: black;"/>
  12. 12 </g>
  13. 13 <use xlink:href="#whiskers" transform="scale(-1,1) translate(-140,0)" />
  14. 14 <!-- ears -->
  15. 15 <polyline points="108 62, 90 10,70 45, 50 10, 32 62" style="stroke: black; fill: none;" />
  16. 16 <!-- mouth -->
  17. 17 <polyline points="35 110, 45 120, 95 120, 105 110" style="stroke: black; fill: none;" />
  18. 18 <!-- nose -->
  19. 19 <path d="M 75 90 L 65 90 A 5 10 0 0 0 75 90" style="stroke: black; fill: #ffcccc;" />
  20. 20 <text x="60" y="165" style="font-family:sans-serif; font-size:14pt;">
  21. 21 Cat
  22. 22 </text>
  23. 23 </svg>

可能大家已经看出来了,这实际上是一个标准的XML文件,在浏览器中浏览,会看到一只猫的图案,如下图:

另外,由于很多人习惯了HTML5式的文档模式,即

  1. 1 <!DOCTYPE HTML>
  2. 2 <html lang="en-US">
  3. 3 <head>
  4. 4 <meta charset="UTF-8">
  5. 5 <title></title>
  6. 6 </head>
  7. 7 <body>
  8. 8
  9. 9 </body>
  10. 10 </html>

将命令空间省略,这里强烈的建议写SVG的时候保留命名空间,即

  1. xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"

后面你会看到因为忽略命令空间而引发的异常。

4、应用SVG图形

如何才能够在HTML文档中引入SVG呢?一般有一下几种方法

  • 包含在<svg>标签内部

  这是一种最直接的方法,但是需要浏览器支持HTML5中的<svg>标签,如:

  1. 1 <!DOCTYPE HTML>
  2. 2 <html lang="en-US">
  3. 3 <head>
  4. 4 <meta charset="UTF-8">
  5. 5 <title>SVG DEMO</title>
  6. 6 </head>
  7. 7 <body>
  8. 8 <svg width="140" height="170">
  9. 9 <title>cat</title>
  10. 10 <desc>Stick Figure of a Cat</desc>
  11. 11 <circle cx="70" cy="95" r="50" style="stroke: black; fill: none;"/>
  12. 12 <circle cx="55" cy="80" r="5" style="stroke: black; fill: #339933"/>
  13. 13 <circle cx="85" cy="80" r="5" style="stroke: black; fill: #339933"/>
  14. 14 <g id="whiskers">
  15. 15 <link x1="75" y1="95" x2="135" y2="85" style="stroke: black;"/>
  16. 16 <link x1="75" y1="95" x2="135" y2="105" style="stroke: black;"/>
  17. 17 </g>
  18. 18 <use xlink:href="#whiskers" transform="scale(-1,1) translate(-140,0)" />
  19. 19 <!-- ears -->
  20. 20 <polyline points="108 62, 90 10,70 45, 50 10, 32 62" style="stroke: black; fill: none;" />
  21. 21 <!-- mouth -->
  22. 22 <polyline points="35 110, 45 120, 95 120, 105 110" style="stroke: black; fill: none;" />
  23. 23 <!-- nose -->
  24. 24 <path d="M 75 90 L 65 90 A 5 10 0 0 0 75 90" style="stroke: black; fill: #ffcccc;" />
  25. 25 <text x="60" y="165" style="font-family:sans-serif; font-size:14pt;">Cat</text>
  26. 26 </svg>
  27. 27 </body>
  28. 28 </html>
  • 通过<embed>或者<object>标签嵌入

  其中DEMO1.svg是先前创建的SVG文件。

  1. 1 <!DOCTYPE HTML>
  2. 2 <html lang="en-US">
  3. 3 <head>
  4. 4 <meta charset="UTF-8">
  5. 5 <title>SVG DEMO</title>
  6. 6 </head>
  7. 7 <body>
  8. 8 <embed src="DEMO1.svg" type="image/svg+xml" width="140" height="170">
  9. 9 <object data="DEMO1.svg" type="image/svg+xml" width="140" height="170"></object>
  10. 10 </body>
  11. 11 </html>
  • 通过<img>标签的src属性
  1. 1 <!DOCTYPE HTML>
  2. 2 <html lang="en-US">
  3. 3 <head>
  4. 4 <meta charset="UTF-8">
  5. 5 <title>SVG DEMO</title>
  6. 6 </head>
  7. 7 <body>
  8. 8 <img src="DEMO1.svg" width="140" height="170" alt="">
  9. 9 </body>
  10. 10 </html>
  • 通过CSS:background: url(...)
  1. 1 <!DOCTYPE HTML>
  2. 2 <html lang="en-US">
  3. 3 <head>
  4. 4 <meta charset="UTF-8">
  5. 5 <title>SVG DEMO</title>
  6. 6 <style type="text/css">
  7. 7 #cat{
  8. 8 width: 140px;
  9. 9 height: 170px;
  10. 10 background: url(DEMO1.svg) no-repeat;
  11. 11 }
  12. 12 </style>
  13. 13 </head>
  14. 14 <body>
  15. 15 <div id="cat"></div>
  16. 16 </body>
  17. 17 </html>

所有的方法都产生同样的结果,如上图所示。

HTML5之SVG的更多相关文章

  1. 突袭HTML5之SVG 2D入门1 - SVG综述////////////////zzzzzzzz

    以二次贝塞尔曲线的公式为例: js函数: //p0.p1.p2三个点,其中p0为起点,p2为终点,p1为控制点 //它们的坐标用数组表示[x,y] //t的范围是0-1 function qBerzi ...

  2. HTML5实战——svg学习

    百度百科: SVG可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式.SVG是W3C制定的一种新的二维矢量图形格式,也 ...

  3. 通过实例深入理解HTML5/CSS3/SVG/WebGL的技术本质

    常常听到人们对于HTML5的讨论,看了页面头部这个那个就是Html5,误认为HTML5只是新增些标签“而已”,学完了W3School似乎就理解了.实际上很多从业人员并没有深入理解业界为什么要推出HTM ...

  4. HTML5之SVG详解(一):基本概括

    转载自:http://www.cnblogs.com/hupeng/archive/2012/12/21/2828456.html 1.背景 SVG是Scalable Vector Graphics的 ...

  5. 关于HTML5用SVG画图

    SVG在HTML5中的应用 SVG(Scalable Vector Graphics)是用来绘制矢量图的HTML5标签.只要定义好XML属性就能够获得与其一致的图像元素. 使用SVG之前先将标签加入到 ...

  6. HTML动画分类 HTML5动画 SVG库 SVG工具 Canvas动画工具

     1.js配合传统css属性控制,可以使用setTimeout或者高级的requestAnimationFrame 2.css3 3.svg 4.canvas(当然,这个还是要配合js)   也许这么 ...

  7. 【HTML5】SVG内联

    什么是SVG? SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG 用于定义用于网络的基于矢量的图形 SVG 使用 XML 格式定义图形 SVG 图像在放大或改变尺 ...

  8. HTML5程序设计--SVG

    SVG(Scalable Vector Graphics):可缩放矢量图形,一种二维图形表示语言. 借助SVG,我们可以实现很多同Canvas API类型的绘制操作,但在Canvas元素上绘制文本的时 ...

  9. HTML5学习--SVG全攻略(基础篇)

    明天高级篇 一.什么是SVG? SVG 指的是可伸缩矢量图形 (Scalable Vector Graphics),它用来定义用于网络的基于矢量的图形,使用 XML 格式定义图形.SVG 图像在放大或 ...

随机推荐

  1. 数组的splice方法

    splice 该方法向或者从数组中添加或者删除项目,返回被删除的项目,同时也会改变原数组. splice(index,howmany,item1,...itemX) index参数:必须,整数,规定添 ...

  2. Android: 详解触摸事件如何传递

    当视图的层次结构比较复杂的时候,触摸事件的响应流程也变得复杂. 举例来说,你也许有一天想要制作一个手势极其复杂的 Activity 来折磨你的用户,你经过简单思索,认为其中应该包含一个 PageVie ...

  3. TinyHttpd代码解析

    十一假期,闲来无事.看了几个C语言开源代码.http://www.cnblogs.com/TinyHttpd 这里本来想解析一下TinyHttpd的代码,但是在网上一搜,发现前辈们已经做的很好了.这里 ...

  4. 上传文件异常问题 | 413 Request Entity Too Large

    开发中遇到这样的问题:一个上传文件的功能,内网测试都正常了,但是发布到外网就无法上传大点的(大于1MB)文件,更奇怪的是,后台还没有任何的异常信息. 于是就用Http抓包工具(HttpDetect)看 ...

  5. SqlServer代理作业

    最近一直在学习SqlServer 作业方面的知识,总结一下. 一:作业存在的库. msdb  use msdb Msdb数据库是代理服务数据库,为其报警.任务调度和记录操作员的操作提供存储空间. 二: ...

  6. 2、Centos6 安装tomcat8.5.31

    1.下载 安装包 wget http://mirrors.aliyun.com/apache/tomcat/tomcat-8/v8.5.31/bin/apache-tomcat-8.5.31.tar. ...

  7. Android 插件化 开发

    插件化知识详细分解及原理 之Binder机制https://blog.csdn.net/yulong0809/article/details/56841993 插件化知识详细分解及原理 之代理,hoo ...

  8. Linux系统运维笔记(二),Linux文件编辑命令

    Linux系统运维笔记 Linux文件编辑命令 首先我们使用命令 vi filename 打开一个文件,这个时候进入到的是命令模式 接下来我们按i,然后键盘随便输入写内容. 然后按ESC重新进入到命令 ...

  9. ps不显示命令本身的进程号

    当我们查看某个服务的进程时候,它会把命令本身的进程显示出来.如下图: 进程号2383 就是我命令本身的进程号,和我实际想看的进程无关 特别是在我们写脚本,kill进程时候会报错: 解决办法可以优化脚本 ...

  10. Laravel 去掉访问后面的 “public”

    将laravel/server.PHP 改名为index.php,再将public目录下的.htaccess拷贝到Larvael根目录下,再访问Larvael就会发现不需要加上public,由于访问入 ...