本文主要介绍SVG画图中的两种主要画图元素:Path和Text,以及SVG的几个基本的几何形状,如线条,折线,多边形,椭圆,矩形,圆等等。本文主要采取理论+例子的方式来介绍,这种方式向来都是解释介绍的王道,同时也是学习的一种好方法。
第一,首先介绍Path
1、简介:
path元素定义了一种闭合或者非闭合的几何形状,一个path节点的定义可能包含几个小path,而这些path当中每个path都代表了一种几何形状,例如直线,曲线等等,定义在一个path节点当中的这些path片段基本上是互相独立的。
2、例子
(1)、定义一个path节点如 <path d="M 0 0 L 100 100">,这个path定义一条直线,如例子中所示,直线的路径主要由属性 d 决定,M有Move to的意思,L有代表直线的意思(straight Line),好了,写到这里,这个例子的意思也很明显了,那就是从起始坐标(0,0)向终点坐标(100,100)画一条直线。
(2)、例子 <path d="M 0 0 L 100 0 L50 100 Z">表示画一个三角形,Z 命令表示从终点坐标(50,100)向起始坐标(0,0)画一条闭合直线,从而此路径是一个闭合的路径,所以 Z 命令的作用主要是:闭合(曲线)。还有一个典型的例子是使用SVG画一个鸭子,勾画鸭子形状的线条是由很多短线条组成的:
<path d="M 0 112
L 20 124 L 40 129 L 60 126 L 80 120 L 100 111 L 120 104 L 140 101 L 164 106 L 170 103 L
173 80 L 178 60
L 185 39 L 200 30 L 220 30 L 240 40 L 260 61 L 280 69 L 290 68 L 288 77 L 272 85 L 250 85 L 230 85
L 215 88 L 211 95
L 215 110 L 228 120 L 241 130 L 251 149 L 252 164 L 242 181 L 221 189 L 200 191 L 180
193 L 160 192 L 140 190 L 120 190
L 100 188 L 80 182 L 61 179 L 42 171 L 30 159 L 13 140 Z"/>
画出的鸭子如下图所示,这里需要43个点,这显然不是最好的选择。
上图改成用曲线来画只需要25个点,这样不仅节省空间,而且会提高运行速度:
<path d="M 0 312
C 40 360 120 280 160 306 C 160 306 165 310 170 303
C 180 200 220 220 260 261 C 260 261 280 273 290 268
C 288 280 272 285 250 285 C 195 283 210 310 230 320
C 260 340 265 385 200 391 C 150 395 30 395 0 312 Z"/>
3、基本命令介绍
以上的例子当中主要是介绍了M命令和L命令。SVG画图的基本命令如下表所示(基本上是画直线的):
(1) 画曲线的命令 C ,此命令有三个参数,(c1x c1y , c2x c2y ,x y)。如从起始点(50,70)向点x,y(200,70)画一条曲线的path定义为<path d="M50,70 C50,20 200,20 200 70">,其中的 c1x c1y 控制了曲线的始点和水平线的角度,称为起始控制点,这个角度实际上是由M定义的起点坐标及 c1x c1y定义的坐标点所画成的直线和水平线间的角度来决定的(?),这条直线可以看成时曲线始点处的切线(?)。同样,曲线终点处的方向是由终点坐标(x,y)和c2x c2y所画成的直线(曲线终点处的切线?)和水平线形成的角度来决定的(?)。c2x c2y称为第二个控制点,如下图所示:
具体例子:
(2)命令Q,用于画二次贝塞曲线,(x,y x1,y1),坐标点(x,y)为曲线的控制点,点(x1,y1)为曲线的结束点。如下图:
(3)命令T,(x,y)映射前面路径后的终点x,映射前面路径后的终点y。如下图:
(4)命令S,(x,y x1,y1),第二控制点(x,y),结束点(x,y)。如下图:
(5)命令A,(rx ry x-axis-rotation large-arc-flag sweep-flag x y),用来画弧线的,一共七个参数,这七个参数代表的意思解释如下:
rx:弧的半长轴长度;
ry:弧的半短轴长度;
x-axis-rotation:此弧段所在的X轴与水平方向的夹角,即X轴的旋转角度;
large-arc-flag:此参数有两个值,分别为0和1。0代表小角度弧线,1代表大角度弧线;
sweep-flag:此参数也有两个值,分别为0和1。1代表从起点到终点弧线绕中心顺时针方向,0代表逆时针方向;
x,y:弧线的终端坐标。
例子:
<path d="M 2 40 A 16 12 0 1 1 32 34">,画出来的弧线为
记住,不要忘了M,它代表起点。
4、注意事项
(1)路径的坐标与坐标之间可以用空格分隔,也可以用逗号分隔,如 <path d="M 0 0 L 100 0 L50 100 Z M300,300 L400,300 L350,400 Z">,子路径M 0 0 L 100 0 L50 100 Z 的坐标之间是使用空格分隔的,而子路径M300,300 L400,300 L350,400 Z 的坐标之间是使用逗号分隔的。
(2)如果命令使用的是小写,这意味着此命令定义的坐标和前面的当前位置是相对的(relative to the previous current position)。例如:
每一个命令都有相对应的小写命令,这些小写命令相当于定义了相对于当前位置的坐标。
(3)当意思比较明显时,命令和坐标值之间可以不必用空格来间隔,如果下一个命令和前一个命令是一样的,命令字母可以忽略不写,如上面使用曲线画鸭子的命令。
(4)必须指出的是,大写命令Z和小写z命令的效果是一样的。
(5)在画图定义中,以点开始的数字如果意思比较明确,数字之间也可以不用空格来间隔,例如:
<path d="M0,0L.5.5.8.2Z">等价于<path d="M 0, 0 L 0.5, 0.5 L 0.8, 0.2 Z">。
第二,text元素介绍
text元素有比较多的样式属性,这里主要介绍三种形式的text。
1、例1,text以及tspan节点
<text x="220" y="20">
<tspan x="220" dy="30">This is multi-line</tspan>
<tspan x="220" dy="30">text or text</tspan>
<tspan x="220" dy="30" style="fill:white;stroke:green">with different properties</tspan>
<tspan x="20" dy="30" rotate="10 20 30 40 0 50 60 70 0 80 90 0 100 110 120 140 150 160 170
180">
that can be produced</tspan>
<tspan x="220" dy="30">using the tspan element</tspan>
</text>
(1)<text>节点只有属性x和y,他们定义了文本的起始位置,实际上这个x,y坐标指的是文本中第一个字母(或文字)的左下角的位置坐标,而且文本是自左向右排列的。
(2)子节点<tspan>是用来调整文本的位置或改变文本的属性的,它同样有x,y属性,或者dx(它的值相对于x)属性或dy(它的值相对于y)属性,目前文本的位置可以根据dx和dy定义的相对值来递增,其中dx定义了x方向的位置递增,dy定义了y方向的位置递增
2、例2,tspan中的rotate属性
<tspan x="20" dy="30" rotate="10 20 30 40 0 50 60 70 0 80 90 0 100 110 120 140 150 160 170
180">
that can be produced</tspan>
由<tspan>节点定义的文本可以通过rotate属性来改变该文本的样式,视觉效果主要是旋转。
3、例3,textPath节点
<path id="duck" d="M 0 312 C 40 360 120 280 160 306 C 160 306 165 310 170 303
C 180 200 220 220 260 261 C 260 261 280 273 290 268 C 288 280 272 285 250 285
C 195 283 210 310 230 320 C 260 340 265 385 200 391 C 150 395 30 395 0 312 Z"/>
<text style="font-size:10">
<textPath xlink:href="#duck">
We go up, then we go down, then up again around his head. Now we are upside down as we
go round his neck and along the bottom to the tail.
</textPath>
</text>
path画了一只鸭子,textPath节点定义了它包含的文本的排列路径,即textPath中的文本是围绕着这只鸭子来排列的。请注意path节点中定义了id属性,textPath节点定义了xlink:href属性,id的属性值等于xlink:href的属性值,两者是这样联系起来的。
4、例4,text当中的其他样式介绍
<text>
<tspan x="30" dy="30" font-size="16">This </tspan>
<tspan x="330" dy="30" fill="red">is </tspan>
<tspan x="530" dy="30" font-weight="normal">a </tspan>
<tspan x="130" dy="30" font-family="Courier" font-size="28">single </tspan>
<tspan x="330" dy="30" fill="green">text </tspan>
<tspan x="30" dy="60" font-style="italic">string </tspan>
<tspan x="430" dy="30" font-size="18">that </tspan>
<tspan x="330" dy="30" font-size="20">has </tspan>
<tspan x="230" dy="30" font-size="24">been </tspan>
<tspan x="130" dy="30" font-size="28">distributed <</tspan>
<tspan dx="30" dy="30">across </tspan>
<tspan dx="130" dy="30">the </tspan>
<tspan dx="-230" dy="30">canvas</tspan>
</text>
以上的例子由SVG画出的图像如下所示。
第三,SVG的其他基本几何形状
从左到右依次为圆,矩形,直线,折线,多边形,椭圆形。
SVG绘画各种图形的命令和例子如下表所示:
第四,结尾
还有很多SVG的基础没有介绍,比如<g>标签,各种基本函数等等。
SVG的功能很强大,以上的一点基础知识介绍可以作为SVG的入门学习,有误的地方希望你能不吝指正,谢谢!
另外,我在这里也上传了一本SVG的初级教程,不过是英文版的,还不错,希望对你有所帮助。
分享到:
相关推荐
本文将深入探讨使用JS进行图形绘制的方法,包括VML和SVG两种技术,以及如何创建一个简单的画图工具。 首先,我们来了解**VML(Vector Markup Language)**。在HTML4时代,VML是一种用于在网页上呈现矢量图形的方式...
"简单矢量画图板"是一款基于MFC(Microsoft Foundation Classes)框架开发的软件,主要用于矢量图形的绘制。这款应用程序特别适合初学者学习和理解MFC编程,因为它的代码结构清晰,注释详尽,使得用户能够轻松地了解...
- **绘图算法**:实现基本的几何形状绘制,如贝塞尔曲线、圆弧等,以及复杂的图形变换,如平移、旋转、缩放。 - **文件格式处理**:导入和导出图形文件,需要理解并解析特定的文件格式标准。 ### 4. 总结 图形编辑...
在IT领域,开发这样的程序涉及到以下几个关键知识点: 1. **图形用户界面**:GUI是用户与计算机系统交互的主要方式,它通过图标、窗口、菜单和控件来呈现信息和接收用户的输入。在这个程序中,可能使用了诸如按钮、...
Java画图板是一种基于Java编程语言实现的图形用户界面(GUI)应用,它允许用户进行基本的绘图操作,如绘制线条、形状以及添加文本。这个应用通常会使用Java的Swing或JavaFX库来构建,这两个库提供了丰富的组件和工具...
PaintArea类的构造函数设置了背景颜色、最小尺寸,并提供了几个函数,如setShape(), setPen(), setBrush()和setFillRule(),用于控制图形的形状、线条样式、填充颜色和填充规则。在重绘函数中,使用QPainter进行实际...
在计算机绘图中,我们通常会遇到以下几个核心概念: 1. 图形坐标系统:这是计算机绘图的基础,它定义了图形的定位和尺寸。坐标系统一般为二维的X-Y平面,有时也会包括Z轴以形成三维空间。 2. 基本图形元素:线、点...
在MiniCADDrawCAD迷你画图软件中,我们可以找到以下几个关键知识点: 1. **界面设计**:迷你画图软件通常有一个直观简洁的用户界面,使得新用户能够快速上手。这包括工具栏、菜单栏和工作区,它们都布局清晰,方便...
在学习和使用这样的矢量绘图程序时,我们需要掌握以下几个核心概念: 1. **矢量图形的基础**:了解矢量图形的原理,如何通过点、线、曲线和路径来构建图形。 2. **绘图工具**:熟悉各种绘图工具的使用,如画笔、...
支持iOS设备的浏览器,例如Safari,支持两个手指捏合地图实现缩放功能,以及创建和编辑几何图形,但不支持浏览器访问照片/视频,也不支持写意的绘画风格。 对于HTML5地理定位和离线Web应用程序的支持是移动设备开发...
对于这类自制画板工具的知识点,我们可以深入探讨以下几个方面: 1. **图形用户界面**:画板工具的核心是其GUI(图形用户界面),包括画布区域、工具栏、颜色选择器、调色板等元素。这些都需要使用编程语言和UI库来...
要手写一个3D柱形图,我们需要掌握以下几个关键技术点: 1. **HTML5 Canvas或SVG**:这是创建图形的基本工具。Canvas提供了一种在网页上绘制2D图形的方法,而SVG则用于创建可缩放的矢量图形。对于3D效果,我们通常...
从【描述】中我们可以推测,源代码可能包含了以下几个关键知识点: 1. 坐标系统:在绘图软件中,坐标系统是基础,它定义了图形的位置和尺寸。开发者可能使用二维笛卡尔坐标系,通过(x, y)坐标来表示点的位置,并...
常见的图形文件格式主要有:EPS、AI、PDF 和 SVG 文件格式,其中 AI 是 Illustrator 的标准文件格式。 Illustrator CS2 的启动与退出 要启动 Illustrator CS2 程序,用户只需单击或双击桌面上的快捷方式图标或在...
软件的使用流程通常包括以下几个步骤:首先,用户需要启动软件并熟悉其界面布局,了解各个工具栏的功能。这些工具可能包括各种电子元件库,如电阻、电容、二极管、晶体管等,以及连接线、箭头和注释等绘图元素。用户...
ReactJS + SVG == 只要我能破解几何图形,JavaScript和SVG都可以让我快速对此模型进行原型制作。 ReactJS使使用声明性语法轻松表达重复的几何形状成为可能。 我想要做的是获取一些代码,以生成在圆顶中看到的SVG模式...
7. **SVG图形**:另一种可能的方法是使用SVG(Scalable Vector Graphics)来创建可缩放的矢量图形,并通过JavaScript来操纵SVG元素的属性,以实现皱纸效果。 8. **物理模拟**:为了使皱纸效果更逼真,可能还需要...
1. **几何形状**:毕加索的立体主义作品常常将物体分解成几何形状,图标设计中可能会看到圆形、方形、三角形等基本图形的组合,以此构建出立体感和深度。 2. **色彩对比**:毕加索善于运用大胆的色彩对比,图标中...