SVG 基础教程
Posted Amo Xiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SVG 基础教程相关的知识,希望对你有一定的参考价值。
目录
最近笔者在抓取数据的时候,遇到了 SVG 反爬,故找了一份 SVG 学习笔记,本文用于记录 SVG 学习过程中的知识点。
一、SVG 基础
SVG
指可伸缩矢量图形,是定义用于网络的基于矢量的图形,并且 SVG
图像不会因为放大或改变尺寸而有所失真。与其他图形相比,SVG
图像有这诸多优势,下面将具体介绍。
为什么使用 SVG?(其实我还想别使用呢,阻碍我抓取数据 哈哈)。SVG 是一种和图像分辨率无关的矢量图形格式,SVG 能得到广大编程者的青睐。自然是有着 过人之处
,其主要优点如下:
- 高质量。由于
SVG
图像不依赖于分辨率的,所以当放大或改变图像尺寸时,图像的清晰度不会被破坏。 - 交互性和动态性。与其他图像格式相比,动态性和交互性是
SVG
较典型的一个特性。SVG
是基于XML
的,它提供强大的交互性,程序员可以在SVG
中嵌入动画元素,或通过脚本定义来达到高亮、声效、动画等特效。 - 颜色控制。
SVG
提供一个1600万种颜色的调色板,支持 ICC颜色描述 文件描述文件标准、RGB、线性填充、渐变和蒙版。 - 文本独立性。
SVG
图像中的文字独立于图像,换句话说,就是SVG
中的图像是可选的,所以SVG
图像中的文字是可以被搜索的。 - 源文件更小。与
JPEG
和GIF
格式的图像相比,SVG
格式源文件的尺寸更小,且可压缩性更强。 - 基于
XML
。SVG
是基于XML
的,这意味着SVG
通过XML
表达信息和传递数据时,不仅可以跨平台,还可以跨控件甚至跨越设备。
使用 SVG 的几种方式。在 HTML 中使用 SVG 文件时,可以通过 <embed> 元素、<object> 元素或者 <iframe> 元素,当然,SVG 代码也可以直接嵌入到 HTML 页面中。下面具体介绍这四种 SVG 的使用方法。
(1) 使用 <embed>。使用 <embed> 标签的优点是,<embed> 标签受到所有主流浏览器支持,并且允许使用脚本;但是其缺点是在 Xhtml 和 HTML4 中不推荐使用 <embed> 标签。其语法如下:
<embed src="demo.svg" type="image/svg+xml">
(2) 使用 <object>。<object> 标签是 HTML4 中的标签,所以在 XHTML、HTML4 以及 HTML5 中都可以使用该标签,并且同样被所有主流浏览器支持,但是使用该标签的缺点就是不允许使用脚本。其语法如下:
<object data="rect" type="image/svg+xml"></object>
(3) 使用 <iframe>。<iframe> 标签被大部分浏览器支持,并且允许使用脚本,其缺点就是在 XHTML 和 HTML4 中不推荐使用该标签(现在主流都H5啦,所以不用考虑太多)。其语法如下:
<iframe src="rect" ></iframe>
(4) 通过 <a> 标签链接到 SVG 文件。除以上各标签外,我们还可以使用链接标签 <a> 标签来引入一个 SVG 文件。具体语法如下:
<a href="demo.svg">打开svg文件</a>
(5) 在 HTML 中直接添加 SVG 代码。在 Firefox、IE9、谷歌Chrome 以及 Safari 中,可以直接在 HTML 嵌入 SVG 代码。笔者学习的时候主要是通过直接嵌入 SVG 代码的方式学习 SVG 相关知识的。其具体方法如下:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"></svg>
二、绘制图形
2.1 绘制矩形
绘制矩形可以使用 <rect> 元素,其语法如下:
<rect rx="5" ry="5" x="50" y="20" width="150" height="70" fill="#FF5722" stroke="#00ffff "stroke-width=" 5"></rect>
该语法中,各属性的含义如下表所示:
属性 | 表示的含义 |
---|---|
width | 必须属性。定义矩形的宽度 |
height | 必须属性。定义矩形的高度 |
x | 可选属性。定义矩形x方向的起始位置 |
y | 可选属性。定义矩形y方向的起始位置 |
rx | 可选属性。x轴的圆角半径 |
ry | 可选属性。y轴的圆角半径 |
fill | 可选属性。矩形的填充样式,若不进行设置,则默认为黑色 |
stroke | 可选属性。矩形的边框样式,若不进行设置,则默认为无边框 |
stroke-width | 可选属性。矩形的边框宽度 |
说明:上述语法中,fill 属性、stroke 属性以及 stroke-width 属性并不是 <rect> 属性所特有的,即其他标签也可以使用该属性,当然,也可以使用 style 来设置其填充样式和边框样式等,若使用 style 则上述语法应该与以下语法相同:
<rect rx="5" ry="5" x="50" y="20" width="150" height="70" style="fill:#ff5722;stroke:#00ffff;stroke-width: 5">
</rect>
【示例1】在页面中嵌入 SVG 标签,然后在 SVG 标签中,通过<rect>元素添加矩形,并且设置矩形的颜色为橙色(#ff5277),具体代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>svg绘制矩形</title>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<rect x="50" y="20" width="150" height="70" fill="#ff5722"></rect>
</svg>
</body>
</html>
其运行效果如下图所示:
2.2 绘制圆形
SVG 中绘制圆形可以使用 <circle> 元素,其语法如下:
<circle cx="20" cy="30" r="10"/>
参数解释:
- cx 属性:定义圆点的x坐标。
- cy 属性:定义圆点的y坐标。
- r 属性:定义圆的半径。
【示例2】在网页中使用 SVG 绘制一个圆形。在 HTML 中添加 SVG 标签,然后在 SVG 标签中添加 circle 标签,然后在 circle 标签中设置圆形的圆点、半径以及设置圆形的颜色和边框颜色等,具体代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>svg绘制圆形</title>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="140" cy="80" r="50" fill="#9acdb4" stroke="#db7093" stroke-width="5"/>
</svg>
</body>
</html>
具体运行效果如下图所示:
2.3 绘制椭圆
绘制椭圆需要使用 <ellipse> 标签,其原理与圆相似,其不同之处在于椭圆有不同的 x 半径和 y 半径,而圆形的 x 半径和 y 半径是相同的,其具体语法如下:
<ellipse cx="140" cy="80" rx="50" ry="30"/>
参数解释:
- cx 属性:定义椭圆中心的x坐标。
- cy 属性:定义椭圆中心的y坐标。
- rx 属性:定义椭圆的水平半径。
- ry 属性:定义椭圆的垂直半径。
【示例3】在网页中使用 SVG 绘制一个椭圆。在网页中绘制一个椭圆,并且设置椭圆的填充颜色和边框颜色,具体代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>svg绘制椭圆</title>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<ellipse cx="140" cy="80" rx="50" ry="30" fill="#a5d9ff" stroke="#ff4d7d" stroke-width="5"/>
</svg>
</body>
</html>
其运行效果如下图所示:
2.4 绘制多边形
SVG 中绘制多边形可以使用 <polygon> 元素,具体语法如下:
<polygon points="90,10 130,10 150,45"/>
该语法中,points 属性是必须属性,该属性用于按顺时针或逆时针顺序依次定义多边形的定点,各顶点使用逗号或空格间隔开都可以。
【示例4】在网页中使用 SVG 绘制一个多边形。本实例中五条首尾相连的直线使其形成一个五角星,具体代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>svg绘制多边形</title>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<polygon points="90,10 130,10 150,45 130,80 90,80 70,45"
fill="#fdb5ff" stroke="#6cde1b" stroke-width="6"/>
</svg>
</body>
</html>
其运行效果如下图所示:
2.5 绘制直线
SVG 中绘制直线可以使用 <line> 元素,具体语法如下:
<line x1="0" y1="0" x2="50" y2="50" />
参数解释:
- x1 属性:定义线条起点x坐标。
- y1 属性:定义线条起点的y坐标。
- x2 属性:定义线条终点的x坐标。
- y2 属性:定义线条终点的y坐标。
【示例5】在网页中使用 SVG 绘制一个五角星。本实例中通过绘制五条首尾相连的直线使其形成一个五角星,具体代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>svg绘制五角星</title>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="300" height="200">
<line x1="50" y1="60" x2="250" y2="60" stroke="#00ff4c" stroke-width="5"/>
<line x1="250" y1="60" x2="100" y2="180" stroke="#00ff4c" stroke-width="5"/>
<line x1="100" y1="180" x2="150" y2="0" stroke="#00ff4c" stroke-width="5"/>
<line x1="150" y1="0" x2="220" y2="180" stroke="#00ff4c" stroke-width="5"/>
<line x1="220" y1="180" x2="50" y2="60" stroke="#00ff4c" stroke-width="5"/>
</svg>
</body>
</html>
其运行效果如下图所示:
2.6 绘制曲线
SVG 中绘制曲线使用 <polyline> 元素绘制曲线,但是该元素只能绘制只有直线的曲线,其语法如下:
<polyline points="30,30 55 70 ,80 30, 105 70,130 30 "style="fill:none;stroke:#00ff4c;stroke-width: 5"/>
同绘制多边形一样,绘制曲线时,需要按顺时针或者逆时针的顺序依次定义各个定点,各定点坐标以空格或逗号间隔都可以。
【示例6】在网页中使用 SVG 绘制一个矩形旋涡,具体代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>svg绘制曲线</title>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="300" height="300">
<polyline points="30,30 240 ,30 240,240 60,240 60,60 210,60 210,210 90,210 90,90 180,90,
180,180 120,180 120,120, 150,120 150,150" style="fill:none;stroke:#ff67fa;stroke-width: 5"/>
</svg>
</body>
</html>
其具体运行效果如下图所示:
2.7 绘制路径
SVG 中绘制路径使用的是 <path> 标签,而通过 path 标签中的 d属性
定义路径。其语法如下:
<path d="M30,30 L240 ,30 "/>
在使用该语法定义路径时,可以使用下表所示的命令指定路径的相关数据:
命令 | 表示的含义 |
---|---|
M | moveto,路径的起点 |
L | lineto从路径的上一个定点与该定点连接 |
H | horizontal lineto绘制水平线 |
V | vertical lineto绘制垂直线 |
C | curveto曲线连接 |
S | smooth curveto平滑的曲线连接 |
Q | quadratic Bézier curve二次贝塞尔曲线 |
T | smooth quadratic Bézier curveto平滑的二次贝塞尔曲线 |
A | elloptical Arc椭圆的弧线 |
Z | closepath将路径的起点与终点连接 |
注意:上表中所有命令大小写字母均可,若为大写字母表示表示绝对定位,反之若为小写字母则表示相对定位。
如下所示的代码可以绘制一条贝塞尔曲线,曲线的起点为A点坐标为(70,50),终点为B点(180,50),而其控制点为(120,130),换句话说,Q命令设置的是贝塞尔二次曲线的控制点和终点,而曲线的起点是Q命令的前一个顶点。
<path d="M70,50 Q120,130,180,50" fill="none" stroke-width="3" stroke="blue"></path>
具体如下图所示:
【示例7】在网页中使用SVG绘制微信会话框,本实例绘制会话框时,从起点开始按逆时针方向开始绘制,为方便理解,本实例会话框的圆角处的曲线为贝塞尔二次曲线。具体代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>svg绘制路径</title>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="300">
<!--M200,30 为起点-->
<!--Q200 10,190 10绘制第一段贝塞尔曲线-->
<!--Q60,10 65,30绘制第二段贝塞尔曲线-->
<!--Q65,65 85,62 绘制第三段贝塞尔曲线-->
<!--Q200,62 200,45 绘制第四段贝塞尔曲线-->
<path d="M200,30L200,20Q200 10,190 10 L80 10 Q60,10 65,30 L65,45Q65,65,85,62
L185,62Q200,62 200,45L 210,38Z" fill以上是关于SVG 基础教程的主要内容,如果未能解决你的问题,请参考以下文章