简介
SVG(Scalable Vector Graphics)代表可升级矢量图象,是新一代图象格式的标准。它给Web开发人员提供了一种利用XML(Extensible Markup Language)创建静态图像和动态图像的方法,是图象技术上的一次革命。利用此技术,Web开发人员对页面进行更加精确的控制,SVG的动画片技术可以实现从简单的直线运动到复杂的3D螺旋变形的控制.
SVG 有许多其他图像方法所不具有的优点,下面就是其中一些:
1,和其它媒介兼容,比如无线设备等。
2,可升级的服务器端解决方案。
3,文件尺寸小,方便Web页面下载。
4,无限的颜色和字体的选择。
5,图像可任意缩放。
6,可以用脚本控制与客户的交互事件。
7,方便浏览器进行高清晰的打印。
8,可使用滤镜效果。
9,基于文本的格式,可以轻松地和其它WEB技术集成。
10,内建的国际语言支持。
11,减少维护成本。
12,轻松升级。
13,广泛的多媒体兼容性。
由于SVG和Flash有很多共同的特性,通常有人把它们放到一起进行比较,确实,两者都和其它标准有很好的兼容性。事实上,SVG比Flash有一些独特的特性。SVG可以使用CSS(Cascading Style Sheets)、Script脚本和DOM(Document Object Model ),是完全公开源代码的技术,初学者完全可以从别人的现成的作品中进行学习。而Flash采用的是独有的专利技术,并不是完全开放的标准,当你在场景上单击右键时,你看到的不是源代码。
然而,由于某些原因,SVG还并没有象Flash那样流行,但随着时间的推移,SVG也将很快流行起来的。Mozilla计划完全支持SVG技术,Microsoft也开始支持这种技术,(其实,IE6已经支持SVG。)Adobe GoLive5也宣布支持SVG。此外,SVG编辑器也开始在网络上风行,Jasc的WebDraw已经可以以可视化的方式创建SVG格式的图像了。Adobe 也有生成SVG格式图象的插件。SVG的未来不但是光明的,而且将会在不久的将来在Web领域扮演重要的角色。
目前,SVG的另一个不足之处就是,没有一个浏览器完全支持它,要浏览SVG格式的图像,需要安装Adobe SVG插件(plug-in),但目前它也不能完全支持SVG的标准。另一个缺陷就是,SVG的在线资料太少,Web开发人员很难找到可参考的资料和素材。
下面。就让我们来了解一下SVG的基本概念,SVG的特性是很多的,这里不能全部罗列出来,我们只是先初步感受一下SVG能够给Web开发人员带来什么.
什么是SVG?
SVG是设计和编程之间的桥梁,与传统的图像制作方法不同,SVG图像是由程序代码生成的,这种语言是基于XML的,因此,它可以和W3C的其它标准无缝集成,比如DOM,CSS等。
为了便于理解,我们可以把浏览器想象成一个空的画布,上面定义了许许多多的X,Y的坐标点,画布上的每一个点,都可以通过数学计算公式创造出一个形体。使用数学的术语可能会使人产生恐惧感,事实上,Web开发者在创建HTML页面时一直在使用这样的数学计算公式已经好长时间了,例如:一个CSS的层,通过设定层的top(y坐标点)和left(x坐标点)属性值,就可以定位它的位置,这就是利用数学公式来实现。SVG就是利用类似的原理来创建图像的。
SVG能够显示24位颜色的图像,而图像尺寸却非常的小,图像在放大或改变尺寸时不会有任何质量上的损失,更重要的是,SVG的每一个元素和元素的每一个属性都能够动态进行改变。这也是SVG最有竞争力的一面。
SVG的文档结构
SVG可以有许多方式来组成Web文档:可以以独立的SVG页面;可以嵌入到页面中;也可以被一个带名字空间的XHTML文档使用,这一点就象XML文档相似.下面先看看独立的SVG页面的例子:
1. <?xml version="1.0" standalone="no"?>
2. <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
3. <svg width="300" height="300" x="0" y="0">
4. <!-- 这里放置SVG的内容代码 -->
5. </svg>
下面我们对上面的代码做一个说明:
第一行:由于SVG是XML的一个应用分支,因此,它也必须符合XML的标准,必须包含XML的声明<?xml version="1.0" standalone="no"?>
第二行:SVG必须遵循一定的标准或规则,这些标准或规则保存在一个被称为Document Type Declaration或DTD的独立文件,来验证SVG文档结构的正确性,DTD精确描述SVG中允许使用的语言和语法规则。
第三行:<svg>标记告诉浏览器,这是一个SVG文档,SVG文档的作用范围(或叫做SVG的画布大小)用height和width属性来定义,如果不定义 width和height属性的话,画布的范围将是整个浏览器,x,y属性告诉浏览器将SVG画布放到什么位置,x属性与我们平常所用top属性相同,指浏览器的top位置,y属性等同于浏览器的left位置,当然,这里也可以使用相对位置来定位,即百分比。
第四行:所有的SVG内容,都被放到<svg></svg>标记之间,
第五行:由于SVG是XML的一个应用,因此,必须有结束标记</svg>来结束文档。
也可以把SVG嵌入到HTML或XHTML文件里:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Object 和 Embed 测试</title>
</head>
<body>
<object data="test.svg" width="500" height="500" type="image/svg+xml">
<embed src="test.svg" width="500" height="500" type="image/svg+xml" />
</object>
</body>
</html>
上面的文件是一个完完全全的HTML结构的文档,最重要的标记是object和embed两个,当然,这是对Internet Explorer和Netscape两种情况的,值得注意的是:object采用data属性指明SVG文件的URL地址,而embed采用src属性来指明SVG文件的URL。
这种方法的优点就是:它可以把HTML和XHTML和SVG的长处结合在一起,例如:可以提高页面被搜索引擎搜索到的机会,可以轻易地添加声音或音乐,(Adobe plug-in支持mp3和wav文件)。
第3个方法就是:利用XML名字空间,这种方式是功能最强大,最具有灵活性,我们在以后的文章里将详细探讨。
下面,就让我们来看几个SVG的例子:
基本形状
和其它矢量化图形工具一样,SVG也有一些预定义的基本形状可供我们直接使用,这些基本形状称为元素,就象HTML文档中的table元素一样,下面是SVG标准里预先定义好的基本形状元素:
矩形<rect>
圆形<circle>
椭圆<ellipse>
直线<line>
折线<polyline>
多边形<polygon>
描绘路径<path>
<rect>
<rect>标记允许你创建矩形或它的变体,比如正方形,圆角矩形等,下面就让我以一个例子来看看:
1. <?xml version="1.0" standalone="no"?>
2. <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
3. <svg width="300" height="300">
4. <rect x="80" y="53" width="189" height="52"
style="fill:rgb(39,44,231); stroke:rgb(0,0,128); stroke-width:1"/>
5. </svg>
上面的代码的第4行定义了一个矩形,以一个<rect>标记开始,定义了矩形的各个属性,x属性定义了矩形距浏览器左边的位置,y属性定义了矩形距浏览器上边的位置,换个角度考虑,就相当于html中元素的left和top属性,width和height属性定义了矩形的宽度和高度,style属性允许我们定义SVG推荐标准支持的CSS样式属性,有许多CSS属性是专门针对SVG的,上面的例子中,fill属性定义了长方形的填充颜色,这里采用的是rgb的格式,SVG也支持颜色名和16进制的颜色格式.比如:fill:red或fill:#ff0000,stroke属性定义边框线,SVG中,如果不定义,边框线没有任何宽度,换句话说,SVG默认边框线宽度为0,对所有的SVG的形状都是这样的。如果需要定义边框线的话,采用这样的确语法格式:stroke:rgb(0,0,128)定义颜色,stroke-width:1定义宽度,我门还可以改变填充颜色的透明度,可以这样写:fill-opacity: 0.1,透明度范围是从0到1,我们也可以定义整个元素的透明度,opacity:0.5,该透明度对填充和边框线都有效,也可以单独定义边框线的透明度:stroke-opacity:0.8。定义圆角矩形,使用rx,ry属性定义圆角的半径:rx="20" ry="20"
例如:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="300" height="300">
<rect x="0" y="0" rx="20" ry="20"
width="289" height="252"
style="fill:olive; stroke:purple; stroke-width:5"/>
</svg>
<line>
<line>通过指定开始点(x1,y1)、结束点(x2,y2)和宽度stroke定义一条直线,语法如下:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="300" height="300">
<line x1="127" y1="65" x2="127" y2="200"
style="stroke:rgb(0,0,0);stroke-width:2"/>
</svg>
要想得到很细的线,可以指定stroke-width为大于0小于1的数值。
<circle>
SVG中,要定义一个圆,只需要指顶圆心的坐标、半径即可,也可以使用样式单属性定义外观的样式:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="300" height="400">
<circle cx="143" cy="163" r="84"
style="fill:rgb(192,192,255); stroke:rgb(0,0,128); stroke-width:1"/>
</svg>
<ellipse>
定义椭圆和定义圆很相象,指定圆心,X,Y轴的半径即可:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="300" height="400">
<ellipse cx="160" cy="163" rx="101" ry="81"
style="fill:rgb(192,192,255);stroke:rgb(0,0,128);stroke-width:1"/>
</svg>
<polygon>
这个标记用来指定连续的点的坐标来,定义多边形。语法如下:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="100%" height="100%">
<polygon points="223.5,123.034 276,213.966 171,213.966"
style="fill:rgb(126,14,83);stroke:rgb(0,0,128);stroke-width:1"/>
</svg>
在SVG中,允许使用浮点数来达到精确控制,这和以前的HTML不一样。
<polyline>
这个标记通过指定各个点的坐标,来定义一条折线,格式如下:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="100%" height="100%">
<polyline points="100,200 100,20 10,200 100,20"
style="stroke:rgb(64,64,64);stroke-width:1"/>
</svg>
<path>
<path>标记是SVG中最复杂的,它创建最复杂的形状,也是最有用、用的最多的,
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="100%" height="100%">
<path d="M10 20 L110 20 L110 120 L10 120"
style="fill:rgb(0,0,153);fill-opacity:0.5;stroke:rgb(0,0,153);stroke-width:4"/>
</svg>
<path>标记的d属性用来描述下面要画的是多类型的形状,M10 20表示画笔移动到点10,20,L110 20表示从当前点画一条线到坐标110,20等,由于path标记采用的格式很复杂,因此,可以画出很复杂的形状,下面的语句在浏览器上画一个螺旋线:
<path d="M156 334 C153.239 334 151 334 151 334 C151
339.523 153.239 344 156 344 C164.284 344 171 339.523 171 334 C171 322.954
164.284 314 156 314 C142.193 314 131 322.954 131 334 C131 350.568 142.193
364 156 364 C175.33 364 191 350.568 191 334 C191 311.909 175.33 294 156
294 C131.147 294 111 311.909 111 334 C111 361.614 131.147 384 156 384
C186.375 384 211 361.614 211 334 C211 300.863 186.375 274 156 274"
style="fill:none;stroke:darkgreen;;stroke-width:2"/>
下面是path标记的d属性使用的命令,注意:大写表示绝对位置,小写表示相对位置:
M = 移动
L = 画直线
H = 水平画线
V = 垂直画线
C = 画曲线
S = 画平滑曲线
Q = 画贝塞尔曲线
T = 画平滑贝塞尔曲线
A = 画圆弧
Z = 关闭路径的描绘
由于描绘路径比较复杂,建议使用画图工具包来生成,比如:Jasc公司的WebDraw,但要动态控制图像,你必须清楚你的每句代码都是做什么的。目前支持SVG的编辑器也开始出现,你可以利用XML SPY来创作您的SVG图象了,SWF格式的Flash也可以转换成SVG格式(http://www.ep.cs.nott.ac.uk/projects/SVG/flash2svg/),Bitmap转换成SVG(http://padc23.padc.mmpc.is.tsukuba.ac.jp/member/morik/fdssvg/),CorelDraw的SVG滤镜下载(http://venus.corel.com/nasapps/DrawSVGDownload/index.html),Adobe Illustrator 10可以直接生成SVG格式的图象文件。
到目前为止,我们已经可以做出比较复杂的图像了,但还不够生动,要做出更加复杂的图象,我们也可以在SVG里使用滤镜效果,就象在Adobe PhotoShop和Micromidea FireWorks里的那样,这将在以后的文章里陆续介绍。
为了查看本文章的例子,您必须安装Adobe SVG plug-in(http://www.adobe.com/svg/)或安装Microsoft Internet Explorer 5.5以后的版本的浏览器。要看到更多的SVG的例子,访问http://lucky.myrice.com。
SVG(Scalable Vector Graphics)代表可升级矢量图象,是新一代图象格式的标准。它给Web开发人员提供了一种利用XML(Extensible Markup Language)创建静态图像和动态图像的方法,是图象技术上的一次革命。利用此技术,Web开发人员对页面进行更加精确的控制,SVG的动画片技术可以实现从简单的直线运动到复杂的3D螺旋变形的控制.
SVG 有许多其他图像方法所不具有的优点,下面就是其中一些:
1,和其它媒介兼容,比如无线设备等。
2,可升级的服务器端解决方案。
3,文件尺寸小,方便Web页面下载。
4,无限的颜色和字体的选择。
5,图像可任意缩放。
6,可以用脚本控制与客户的交互事件。
7,方便浏览器进行高清晰的打印。
8,可使用滤镜效果。
9,基于文本的格式,可以轻松地和其它WEB技术集成。
10,内建的国际语言支持。
11,减少维护成本。
12,轻松升级。
13,广泛的多媒体兼容性。
由于SVG和Flash有很多共同的特性,通常有人把它们放到一起进行比较,确实,两者都和其它标准有很好的兼容性。事实上,SVG比Flash有一些独特的特性。SVG可以使用CSS(Cascading Style Sheets)、Script脚本和DOM(Document Object Model ),是完全公开源代码的技术,初学者完全可以从别人的现成的作品中进行学习。而Flash采用的是独有的专利技术,并不是完全开放的标准,当你在场景上单击右键时,你看到的不是源代码。
然而,由于某些原因,SVG还并没有象Flash那样流行,但随着时间的推移,SVG也将很快流行起来的。Mozilla计划完全支持SVG技术,Microsoft也开始支持这种技术,(其实,IE6已经支持SVG。)Adobe GoLive5也宣布支持SVG。此外,SVG编辑器也开始在网络上风行,Jasc的WebDraw已经可以以可视化的方式创建SVG格式的图像了。Adobe 也有生成SVG格式图象的插件。SVG的未来不但是光明的,而且将会在不久的将来在Web领域扮演重要的角色。
目前,SVG的另一个不足之处就是,没有一个浏览器完全支持它,要浏览SVG格式的图像,需要安装Adobe SVG插件(plug-in),但目前它也不能完全支持SVG的标准。另一个缺陷就是,SVG的在线资料太少,Web开发人员很难找到可参考的资料和素材。
下面。就让我们来了解一下SVG的基本概念,SVG的特性是很多的,这里不能全部罗列出来,我们只是先初步感受一下SVG能够给Web开发人员带来什么.
什么是SVG?
SVG是设计和编程之间的桥梁,与传统的图像制作方法不同,SVG图像是由程序代码生成的,这种语言是基于XML的,因此,它可以和W3C的其它标准无缝集成,比如DOM,CSS等。
为了便于理解,我们可以把浏览器想象成一个空的画布,上面定义了许许多多的X,Y的坐标点,画布上的每一个点,都可以通过数学计算公式创造出一个形体。使用数学的术语可能会使人产生恐惧感,事实上,Web开发者在创建HTML页面时一直在使用这样的数学计算公式已经好长时间了,例如:一个CSS的层,通过设定层的top(y坐标点)和left(x坐标点)属性值,就可以定位它的位置,这就是利用数学公式来实现。SVG就是利用类似的原理来创建图像的。
SVG能够显示24位颜色的图像,而图像尺寸却非常的小,图像在放大或改变尺寸时不会有任何质量上的损失,更重要的是,SVG的每一个元素和元素的每一个属性都能够动态进行改变。这也是SVG最有竞争力的一面。
SVG的文档结构
SVG可以有许多方式来组成Web文档:可以以独立的SVG页面;可以嵌入到页面中;也可以被一个带名字空间的XHTML文档使用,这一点就象XML文档相似.下面先看看独立的SVG页面的例子:
1. <?xml version="1.0" standalone="no"?>
2. <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
3. <svg width="300" height="300" x="0" y="0">
4. <!-- 这里放置SVG的内容代码 -->
5. </svg>
下面我们对上面的代码做一个说明:
第一行:由于SVG是XML的一个应用分支,因此,它也必须符合XML的标准,必须包含XML的声明<?xml version="1.0" standalone="no"?>
第二行:SVG必须遵循一定的标准或规则,这些标准或规则保存在一个被称为Document Type Declaration或DTD的独立文件,来验证SVG文档结构的正确性,DTD精确描述SVG中允许使用的语言和语法规则。
第三行:<svg>标记告诉浏览器,这是一个SVG文档,SVG文档的作用范围(或叫做SVG的画布大小)用height和width属性来定义,如果不定义 width和height属性的话,画布的范围将是整个浏览器,x,y属性告诉浏览器将SVG画布放到什么位置,x属性与我们平常所用top属性相同,指浏览器的top位置,y属性等同于浏览器的left位置,当然,这里也可以使用相对位置来定位,即百分比。
第四行:所有的SVG内容,都被放到<svg></svg>标记之间,
第五行:由于SVG是XML的一个应用,因此,必须有结束标记</svg>来结束文档。
也可以把SVG嵌入到HTML或XHTML文件里:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Object 和 Embed 测试</title>
</head>
<body>
<object data="test.svg" width="500" height="500" type="image/svg+xml">
<embed src="test.svg" width="500" height="500" type="image/svg+xml" />
</object>
</body>
</html>
上面的文件是一个完完全全的HTML结构的文档,最重要的标记是object和embed两个,当然,这是对Internet Explorer和Netscape两种情况的,值得注意的是:object采用data属性指明SVG文件的URL地址,而embed采用src属性来指明SVG文件的URL。
这种方法的优点就是:它可以把HTML和XHTML和SVG的长处结合在一起,例如:可以提高页面被搜索引擎搜索到的机会,可以轻易地添加声音或音乐,(Adobe plug-in支持mp3和wav文件)。
第3个方法就是:利用XML名字空间,这种方式是功能最强大,最具有灵活性,我们在以后的文章里将详细探讨。
下面,就让我们来看几个SVG的例子:
基本形状
和其它矢量化图形工具一样,SVG也有一些预定义的基本形状可供我们直接使用,这些基本形状称为元素,就象HTML文档中的table元素一样,下面是SVG标准里预先定义好的基本形状元素:
矩形<rect>
圆形<circle>
椭圆<ellipse>
直线<line>
折线<polyline>
多边形<polygon>
描绘路径<path>
<rect>
<rect>标记允许你创建矩形或它的变体,比如正方形,圆角矩形等,下面就让我以一个例子来看看:
1. <?xml version="1.0" standalone="no"?>
2. <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
3. <svg width="300" height="300">
4. <rect x="80" y="53" width="189" height="52"
style="fill:rgb(39,44,231); stroke:rgb(0,0,128); stroke-width:1"/>
5. </svg>
上面的代码的第4行定义了一个矩形,以一个<rect>标记开始,定义了矩形的各个属性,x属性定义了矩形距浏览器左边的位置,y属性定义了矩形距浏览器上边的位置,换个角度考虑,就相当于html中元素的left和top属性,width和height属性定义了矩形的宽度和高度,style属性允许我们定义SVG推荐标准支持的CSS样式属性,有许多CSS属性是专门针对SVG的,上面的例子中,fill属性定义了长方形的填充颜色,这里采用的是rgb的格式,SVG也支持颜色名和16进制的颜色格式.比如:fill:red或fill:#ff0000,stroke属性定义边框线,SVG中,如果不定义,边框线没有任何宽度,换句话说,SVG默认边框线宽度为0,对所有的SVG的形状都是这样的。如果需要定义边框线的话,采用这样的确语法格式:stroke:rgb(0,0,128)定义颜色,stroke-width:1定义宽度,我门还可以改变填充颜色的透明度,可以这样写:fill-opacity: 0.1,透明度范围是从0到1,我们也可以定义整个元素的透明度,opacity:0.5,该透明度对填充和边框线都有效,也可以单独定义边框线的透明度:stroke-opacity:0.8。定义圆角矩形,使用rx,ry属性定义圆角的半径:rx="20" ry="20"
例如:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="300" height="300">
<rect x="0" y="0" rx="20" ry="20"
width="289" height="252"
style="fill:olive; stroke:purple; stroke-width:5"/>
</svg>
<line>
<line>通过指定开始点(x1,y1)、结束点(x2,y2)和宽度stroke定义一条直线,语法如下:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="300" height="300">
<line x1="127" y1="65" x2="127" y2="200"
style="stroke:rgb(0,0,0);stroke-width:2"/>
</svg>
要想得到很细的线,可以指定stroke-width为大于0小于1的数值。
<circle>
SVG中,要定义一个圆,只需要指顶圆心的坐标、半径即可,也可以使用样式单属性定义外观的样式:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="300" height="400">
<circle cx="143" cy="163" r="84"
style="fill:rgb(192,192,255); stroke:rgb(0,0,128); stroke-width:1"/>
</svg>
<ellipse>
定义椭圆和定义圆很相象,指定圆心,X,Y轴的半径即可:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="300" height="400">
<ellipse cx="160" cy="163" rx="101" ry="81"
style="fill:rgb(192,192,255);stroke:rgb(0,0,128);stroke-width:1"/>
</svg>
<polygon>
这个标记用来指定连续的点的坐标来,定义多边形。语法如下:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="100%" height="100%">
<polygon points="223.5,123.034 276,213.966 171,213.966"
style="fill:rgb(126,14,83);stroke:rgb(0,0,128);stroke-width:1"/>
</svg>
在SVG中,允许使用浮点数来达到精确控制,这和以前的HTML不一样。
<polyline>
这个标记通过指定各个点的坐标,来定义一条折线,格式如下:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="100%" height="100%">
<polyline points="100,200 100,20 10,200 100,20"
style="stroke:rgb(64,64,64);stroke-width:1"/>
</svg>
<path>
<path>标记是SVG中最复杂的,它创建最复杂的形状,也是最有用、用的最多的,
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="100%" height="100%">
<path d="M10 20 L110 20 L110 120 L10 120"
style="fill:rgb(0,0,153);fill-opacity:0.5;stroke:rgb(0,0,153);stroke-width:4"/>
</svg>
<path>标记的d属性用来描述下面要画的是多类型的形状,M10 20表示画笔移动到点10,20,L110 20表示从当前点画一条线到坐标110,20等,由于path标记采用的格式很复杂,因此,可以画出很复杂的形状,下面的语句在浏览器上画一个螺旋线:
<path d="M156 334 C153.239 334 151 334 151 334 C151
339.523 153.239 344 156 344 C164.284 344 171 339.523 171 334 C171 322.954
164.284 314 156 314 C142.193 314 131 322.954 131 334 C131 350.568 142.193
364 156 364 C175.33 364 191 350.568 191 334 C191 311.909 175.33 294 156
294 C131.147 294 111 311.909 111 334 C111 361.614 131.147 384 156 384
C186.375 384 211 361.614 211 334 C211 300.863 186.375 274 156 274"
style="fill:none;stroke:darkgreen;;stroke-width:2"/>
下面是path标记的d属性使用的命令,注意:大写表示绝对位置,小写表示相对位置:
M = 移动
L = 画直线
H = 水平画线
V = 垂直画线
C = 画曲线
S = 画平滑曲线
Q = 画贝塞尔曲线
T = 画平滑贝塞尔曲线
A = 画圆弧
Z = 关闭路径的描绘
由于描绘路径比较复杂,建议使用画图工具包来生成,比如:Jasc公司的WebDraw,但要动态控制图像,你必须清楚你的每句代码都是做什么的。目前支持SVG的编辑器也开始出现,你可以利用XML SPY来创作您的SVG图象了,SWF格式的Flash也可以转换成SVG格式(http://www.ep.cs.nott.ac.uk/projects/SVG/flash2svg/),Bitmap转换成SVG(http://padc23.padc.mmpc.is.tsukuba.ac.jp/member/morik/fdssvg/),CorelDraw的SVG滤镜下载(http://venus.corel.com/nasapps/DrawSVGDownload/index.html),Adobe Illustrator 10可以直接生成SVG格式的图象文件。
到目前为止,我们已经可以做出比较复杂的图像了,但还不够生动,要做出更加复杂的图象,我们也可以在SVG里使用滤镜效果,就象在Adobe PhotoShop和Micromidea FireWorks里的那样,这将在以后的文章里陆续介绍。
为了查看本文章的例子,您必须安装Adobe SVG plug-in(http://www.adobe.com/svg/)或安装Microsoft Internet Explorer 5.5以后的版本的浏览器。要看到更多的SVG的例子,访问http://lucky.myrice.com。
相关推荐
SVG转CSS:将SVG图形转换为CSS背景图像可以简化代码,降低文件大小,并利于CSS的复用。这通常通过将SVG数据嵌入到CSS的`background-image`属性的`url()`函数中,使用`data:`协议来实现。例如,SVG图形可以被编码为...
总结来说,使用.NET和SVG.dll库在VS2012中进行SVG到PNG的转换是一个简单的过程,主要包括导入SVG库、创建SVG文档实例、设置图像尺寸、渲染SVG到Bitmap,最后保存Bitmap为PNG文件。这个功能对于.NET开发者在处理SVG...
本文将深入探讨如何使用JavaScript实现SVG到图片的转换,并介绍一个名为`svgToImg`的代码组件,该组件已被验证为有效。 SVG到图片的转换通常涉及以下步骤: 1. **获取SVG内容**:首先,你需要获取SVG元素的XML表示...
5. **结果展示**:最后,生成的SVG代码被插入到HTML文档中,或者作为下载提供给用户。这可以通过创建一个新的`<svg>`元素并将路径数据填充到其中来完成。 6. **性能优化**:为了提高转换效率和降低SVG文件大小,...
本文将详细探讨如何实现SVG代码与CSS代码的相互转换,并介绍一种名为"svg2css"的工具来帮助完成这一过程。 SVG是一种基于XML的矢量图像格式,它可以无限缩放而不失真,非常适合用于图标、徽标和其他图形元素。CSS3...
总的来说,使用C/C++和PlutoSVG库进行SVG到PNG的转换是一项实用的技术,它可以满足在多种应用场景下对图像格式的需求。通过理解SVG和PlutoSVG的工作原理,开发者能够更好地处理矢量图形与像素图之间的转换,提升项目...
DXF是一种由Autodesk为AutoCAD设计的二维图形交换格式,而SVG是一种基于XML的矢量图像格式,广泛应用于网页和移动应用,因为它可以无损缩放且文件大小较小。 首先,理解DXF文件结构是进行转换的关键。DXF文件包含了...
在C#中,可以创建一个PdfDocument对象,然后利用iTextSharp的SVG支持,将SVG图像转换为PDF页面。这涉及到将SVG解析为PDF的图形指令,然后添加到PDF文档中。 4. 引用动态链接库(dll): 在C#项目中,可以直接引用...
- 内联:直接在HTML文档中嵌入SVG代码。 ```html <svg width="100" height="100"> </svg> ``` - 外联:通过`<object>`或`<img>`标签引用外部SVG文件。 ```html <img src="image.svg" alt="SVG Image" /> ...
为了在WPF应用中使用SVG图像,我们需要依赖第三方库来实现转换。这里提到的"SharpVectors"是一个强大的.NET库,它允许开发者在WPF应用中处理SVG图像。具体到这个场景,我们使用了SharpVectors的一个子模块:...
3. **渲染与转换**: 创建一个`TranscoderInput`和`TranscoderOutput`对象,然后使用`SVGTranscoder`将SVG渲染并保存为PNG或JPEG。 ```java TranscoderInput input = new TranscoderInput(document); File output...
`jquery-svg-convert`是一个jQuery插件,专门解决这个问题,它允许开发者轻松地将.svg图像转换为可编程的代码,便于在网页中动态使用SVG图标。 首先,让我们深入了解一下SVG。SVG是一种基于XML的矢量图形格式,这...
4. **转换过程**:基本步骤包括加载SVG文件,创建一个适当的绘图表面(如Bitmap对象),然后使用SVG.NET提供的方法将SVG图形绘制到这个表面。最后,可以保存这个位图图像为PNG、JPEG或其他位图格式。 5. **代码示例...
本篇文章将深入探讨如何将SVG图转换为适配WPF使用的XAML代码,并提供一些相关的技术点和工具推荐。 1. **SVG和XAML的相似性**: - SVG与XAML都基于XML,因此它们的结构和语法有一定的共通性。 - 在SVG中,图形由...
这个模块的核心功能在于能够用Perl生成SVG格式的Sparkline图表,SVG是一种基于XML的矢量图像格式,这意味着无论放大多少倍,图像都能保持清晰,不会失真。SVG::Sparkline允许开发者通过编程方式控制图表的各种属性,...
对于矢量格式,我们可以使用`pdflatex`生成PDF,然后用`pdf2svg`将PDF转换为SVG。Python中有一个名为`latexmk`的工具,它可以自动化这个过程。 下面是一个基本的Python脚本示例,用于生成LaTeX公式的SVG图像: ```...
Perl SVG模块是一个强大的Perl编程库,它允许开发者使用Perl语言创建和操纵Scalable Vector Graphics (SVG)格式的图形。SVG是一种基于XML的矢量图像标准,广泛应用于网页设计、数据可视化、科学图表以及生物信息学等...
电力SVG图形浏览程序源代码是一个项目,用于展示和解析SVG(Scalable Vector Graphics)图形,尤其适用于处理来自南瑞的open3000系统导出的SVG图像。SVG是一种基于XML的矢量图像格式,它能够以清晰的分辨率显示复杂...
例如,我们可以用以下代码创建一个简单的圆形: ```html <svg width="100" height="100"> </svg> ``` 接下来,Canvas是HTML5中的另一个重要图形API,它提供了一个画布,开发者可以使用JavaScript来绘制2D图形。...
- 为了在Glide中使用SVG,我们需要创建一个自定义的`GlideModule`,并实现`Encoder`接口,以便将SVG对象编码为字节数组。 - 示例代码: ```java public class SvgGlideModule implements AppGlideModule { @...