您的位置:首页 > 其它

基于SVG的web页面图形绘制API介绍

2013-06-27 10:41 357 查看
一:什么是SVG
SVG是1999由W3C发布的2D图形描述语言,纯基于XML格式的标记语言,SVG的
全称是可扩展的矢量图形跟传统的Raster方式的图形(JPG, PNG, GIF等)有很大的差
别。SVG是2D图形开发平台,包括两个部分,一个是基于XML语言的数据描述,另
外一部分是可编程的API,其关键特性支持图形,文本,梯度填充,画笔风格,图形
特效滤镜如高斯模糊,会在稍后的代码中演示。同时还支持各种鼠标事件与DOM部
分API。几乎所有的主流浏览器都支持SVG图形格式的现实与绘制,IE9+以上也开始
支持SVG,在低版本的IE中需要插件支持。
更多了解SVG访问这里:http://www.w3.org/Graphics/SVG/About.html

二:JavaScript中SVG API编程演示
创建与获取SVG对象
// create svg object var mySvg = document.createElementNS("http://www.w3.org/2000/svg","svg"); mySvg.setAttribute("version","1.2");// IE9+ support SVG 1.1 version mySvg.setAttribute("baseProfile","tiny"); container.appendChild(mySvg);

在SVG中创建一个矩形图形:
var c1 = document.createElementNS("http://www.w3.org/2000/svg","rect"); c1.setAttribute("x","20"); c1.setAttribute("y","20"); c1.setAttribute("width","150"); c1.setAttribute("height","150"); c1.setAttribute("fill","rgb(0,0,255)"); c1.setAttribute("stroke","rgb(0,0,0)"); c1.setAttribute("stroke-width","4"); mySvg.appendChild(c1);

在SVG中实现文本绘制:
// SVG draw text var stext = document.createElementNS("http://www.w3.org/2000/svg","text"); stext.setAttribute("x","700"); stext.setAttribute("y","100"); stext.setAttribute("font-size","18px"); stext.setAttribute("fill","#FF0000"); var textString = document.createTextNode("Hello SVG"); stext.appendChild(textString); mySvg.appendChild(stext);

在SVG对象上实现鼠标点击事件处理与MouseUp事件处理:
// mouse event handling c1.addEventListener("click",changeColor,false); c2.addEventListener("mouseup", changeColor,false);

通过SVG 图形滤镜实现高斯模糊:
<div id="blur-image-demo">         	<div id="left" style="width:20%;"><img src=\'#\'"  alt="Original image" width="325" height="471"></div>         	<div id="right" style="width:80%;"> 		        <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> 				  <defs> 				    <filter id="f1" x="0" y="0"> 				      <feGaussianBlur in="SourceGraphic" stdDeviation="5" /> 				    </filter> 				  </defs> 				  <image x="0" y="0" width="325" height="471" xlink:href="woniu.png" filter="url(#f1)"/> 				</svg> 			</div>  		</div>
运行效果:


源代码,可以copy直接运行
JavaScript部分

window.onload = function() {             	// get DIV             	var container = document.getElementById("svgContainer");              	// create svg object             	var mySvg = document.createElementNS("http://www.w3.org/2000/svg", "svg");             	mySvg.setAttribute("version", "1.2");// IE9+ support SVG 1.1 version             	mySvg.setAttribute("baseProfile", "tiny");             	container.appendChild(mySvg);             	             	// create svg shape - rectangle 				var c1 = document.createElementNS("http://www.w3.org/2000/svg", "rect");             	c1.setAttribute("x", "20");             	c1.setAttribute("y", "20");             	c1.setAttribute("width", "150");             	c1.setAttribute("height", "150");             	c1.setAttribute("fill", "rgb(0,0,255)");             	c1.setAttribute("stroke", "rgb(0,0,0)");             	c1.setAttribute("stroke-width", "4");             	mySvg.appendChild(c1);             	             	// create svg shape - circle             	var c2 = document.createElementNS("http://www.w3.org/2000/svg", "circle");             	c2.setAttribute("cx", "250");             	c2.setAttribute("cy", "100");             	c2.setAttribute("r", "60");             	c2.setAttribute("fill", "#996699");             	c2.setAttribute("stroke", "#AA99FF");             	c2.setAttribute("stroke-width", "7");             	mySvg.appendChild(c2);             	             	// create svg shape - ellipse             	var c3 = document.createElementNS("http://www.w3.org/2000/svg", "ellipse");             	c3.setAttribute("cx", "450");             	c3.setAttribute("cy", "100");             	c3.setAttribute("rx", "100");             	c3.setAttribute("ry", "50");             	c3.setAttribute("fill", "#FF0000");             	c3.setAttribute("stroke", "purple");             	c3.setAttribute("stroke-width", "3");             	mySvg.appendChild(c3);             	             	// create svg shape - draw lines             	for(var i=0; i<10; i++) 				{             		var sline = document.createElementNS("http://www.w3.org/2000/svg", "line");             		var x1 = 580 + i*10;             		console.log(x1);             		             		sline.setAttribute("x1", x1.toString());             		sline.setAttribute("y1", "10");             		sline.setAttribute("x2", x1.toString());             		sline.setAttribute("y2", "180");             		sline.setAttribute("stroke", "rgb(0,255,0)");             		sline.setAttribute("stroke-width", "2");                 	mySvg.appendChild(sline); 				}             	 	        	// SVG draw text 	        	var stext = document.createElementNS("http://www.w3.org/2000/svg", "text"); 	        	stext.setAttribute("x", "700"); 	        	stext.setAttribute("y", "100"); 	        	stext.setAttribute("font-size", "18px"); 	        	stext.setAttribute("fill", "#FF0000"); 	        	var textString = document.createTextNode("Hello SVG"); 	        	stext.appendChild(textString); 	        	mySvg.appendChild(stext);             	             	// mouse event handling             	c1.addEventListener("click", changeColor, false);             	c2.addEventListener("mouseup", changeColor, false);             };                          function changeColor(evt) {                 var target = evt.target;                 target.setAttributeNS(null, "fill", "green");             }
HTML部分:
<html>     <head>         <title>Gloomyfish SVG Demo</title>                  <style>             #svgContainer {                 width:800px;                 height:200px;                 background-color:#EEEEEE;             }                          #left { float: left;}  			#right { float: right;}          </style>            </head>     <body>         <div id="svgContainer"></div> <div id="blur-image-demo">         	<div id="left" style="width:20%;"><img src=\'#\'"  alt="Original image" width="325" height="471"></div>         	<div id="right" style="width:80%;"> 		        <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> 				  <defs> 				    <filter id="f1" x="0" y="0"> 				      <feGaussianBlur in="SourceGraphic" stdDeviation="5" /> 				    </filter> 				  </defs> 				  <image x="0" y="0" width="325" height="471" xlink:href="woniu.png" filter="url(#f1)"/> 				</svg> 			</div>  		</div>     </body> </html>
转载请务必注明出处

本文出自 “流浪的鱼” 博客,请务必保留此出处http://gloomyfish.blog.51cto.com/8837804/1400292
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: