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

简介: 一:什么是SVG SVG是1999由W3C发布的2D图形描述语言,纯基于XML格式的标记语言,SVG的 全称是可扩展的矢量图形跟传统的Raster方式的图形(JPG, PNG, GIF等)有很大的差 别。

一:什么是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="woniu.png" 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="woniu.png" 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>
转载请务必注明出处

目录
打赏
0
0
0
0
9
分享
相关文章
用markdown语法制作一个好看的网址导航页面(markdown-web-nav)
这是一篇关于创建网址导航页面的工具分享文章。作者介绍了从手动编写HTML代码到开发可视化工具 *markdown-web-nav* 的历程,旨在简化网址管理与导航页面生成的过程。该工具支持新增、编辑和删除网址数据,通过导入/导出JSON文件、实时预览Markdown效果以及一键复制等功能,让用户轻松制作美观的网站导航页面。文章还提供了详细的操作步骤及常见问题解答,如还原数据、获取网站图标链接等,适合不同技术水平的用户使用。
114 28
H5 页面与 Web 页面的制作方法
H5页面制作利用HTML5、CSS3和JavaScript技术,结合H5编辑器或框架(如Adobe Dreamweaver、Ionic),注重移动设备兼容性与响应式布局。Web页面制作则基于传统HTML、CSS和JavaScript,借助文本编辑器或IDE完成开发。两者区别在于技术版本、交互性和浏览器支持:H5更互动、现代,但可能不兼容旧浏览器;Web页面更静态、兼容性广。根据需求选择:高交互选H5,广泛兼容选Web。
64 6
突破网页数据集获取难题:Web Unlocker API 助力 AI 训练与微调数据集全方位解决方案
本文介绍了Web Unlocker API、Web-Scraper和SERP API三大工具,助力解决AI训练与微调数据集获取难题。Web Unlocker API通过智能代理和CAPTCHA绕过技术,高效解锁高防护网站数据;Web-Scraper支持动态内容加载,精准抓取复杂网页信息;SERP API专注搜索引擎结果页数据抓取,适用于SEO分析与市场研究。这些工具大幅降低数据获取成本,提供合规保障,特别适合中小企业使用。粉丝专属体验入口提供2刀额度,助您轻松上手!
69 2
Python 原生爬虫教程:京东商品列表页面数据API
京东商品列表API是电商大数据分析的重要工具,支持开发者、商家和研究人员获取京东平台商品数据。通过关键词搜索、分类筛选、价格区间等条件,可返回多维度商品信息(如名称、价格、销量等),适用于市场调研与推荐系统开发。本文介绍其功能并提供Python请求示例。接口采用HTTP GET/POST方式,支持分页、排序等功能,满足多样化数据需求。
网络安全公司推荐:F5荣膺IDC全球Web应用与API防护领导者
网络安全公司推荐:F5荣膺IDC全球Web应用与API防护领导者
56 3
1688 宝贝详情页面API接口系列指南
本文介绍了如何通过 1688.item_get API 获取 1688 平台上商品的详细信息,包括标题、价格、库存等,满足电商数据采集与分析需求。接口需传入商品 ID 等参数,返回 JSON 格式数据。文中提供了 Python 请求示例,使用 requests 库调用 API,开发者需替换实际 URL、API 密钥及商品 ID。代码包含错误处理,便于调试和应用拓展。此方法适用于商品监控、竞品分析等场景。
Understanding RESTful API and Web Services: Key Differences and Use Cases
在现代软件开发中,RESTful API和Web服务均用于实现系统间通信,但各有特点。RESTful API遵循REST原则,主要使用HTTP/HTTPS协议,数据格式多为JSON或XML,适用于无状态通信;而Web服务包括SOAP和REST,常用于基于网络的API,采用标准化方法如WSDL或OpenAPI。理解两者区别有助于选择适合应用需求的解决方案,构建高效、可扩展的应用程序。
Python 原生爬虫教程:京东商品详情页面数据API
本文介绍京东商品详情API在电商领域的应用价值及功能。该API通过商品ID获取详细信息,如基本信息、价格、库存、描述和用户评价等,支持HTTP请求(GET/POST),返回JSON或XML格式数据。对于商家优化策略、开发者构建应用(如比价网站)以及消费者快速了解商品均有重要意义。研究此API有助于推动电商业务创新与发展。
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
137 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等