基于SVG的web页面图形绘制API介绍
转自:http://blog.csdn.net/jia20003/article/details/9185449
一:什么是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>
转载请务必注明出处
基于SVG的web页面图形绘制API介绍的更多相关文章
- 基于视觉的Web页面分页算法VIPS的实现源代码下载
基于视觉的Web页面分页算法VIPS的实现源代码下载 - tingya的专栏 - 博客频道 - CSDN.NET 基于视觉的Web页面分页算法VIPS的实现源代码下载 分类: 技术杂烩 2006-04 ...
- 基于svg.js实现对图形的拖拽、选择和编辑操作
本文主要记录如何使用 svg.js 实现对图形的拖拽,选择,图像渲染及各类形状的绘制操作. 1.关于SVG SVG 是可缩放的矢量图形,使用XML格式定义图像,可以生成对应的DOM节点,便于对单个图形 ...
- SVG 2D入门2 - 图形绘制
基本形状 SVG提供了很多的基本形状,这些元素可以直接使用,这一点比canvas好多了.废话不说了,直接看例子,这个最直接: <svg width="200" heigh ...
- d3.js 之SVG:矢量化图形绘制
SVG Scalable Vector Graphics 是一个成熟的W3C标准,被设计用来在web和移动平台 上展示可交互的图形.和HTML类似,SVG也支持CSS和JavaScript.尽管可以使 ...
- JAVA WEB学习笔记(三):简单的基于Tomcat的Web页面
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- QQ音乐Android客户端Web页面通用性能优化实践
QQ音乐 Android 客户端的 Web 页面日均 PV 达到千万量级,然而页面的打开耗时与 Native 页面相距甚远,需要系统性优化.本文将介绍 QQ 音乐 Android 客户端在进行 Web ...
- 基于图形检测API(shape detection API)的人脸检测
原文:https://paul.kinlan.me/face-detection/ 在 Google 开发者峰会中,谷歌成员 Miguel Casas-Sanchez 跟我说:"嘿 Paul ...
- 创建基于OData的Web API - Knowledge Builder API, Part I:Business Scenario
在.NET Core 刚刚1.0 RC的时候,我就给OData团队创建过Issue让他们支持ASP.NET Core,然而没有任何有意义的答复. Roadmap for ASP.NET Core 1. ...
- 基于Metronic的Bootstrap开发框架经验总结(9)--实现Web页面内容的打印预览和保存操作
在前面介绍了很多篇相关的<Bootstrap开发框架>的系列文章,这些内容基本上覆盖到了我这个Bootstrap框架的各个主要方面的内容,总体来说基本达到了一个稳定的状态,随着时间的推移可 ...
随机推荐
- [讨论] win7封装时如何直接开通局域网共享
ekincheng 发表于 2016-10-31 20:17:54 https://www.itsk.com/thread-371838-1-5.html Win7封装时不能像XP那样直接开启局域网共 ...
- 浅谈HTTP协议(下)
下面来讲响应消息.响应消息也分为响应起始行.响应头部.CRLF.响应主体. 响应起始行包括协议版本.响应状态码.原因短句.这里的重点就是响应状态码,它一共分为5类,状态码准确的说是一个三位数. 1xx ...
- mysqld_safe启动报错 mysqld_safe The file /usr/local/mysql/bin/mysqld does not exist or is not executable
报错(如下),但是使用mysqld直接启动没有问题. 150718 00:03:38 mysqld_safe Logging to '/var/log/mysqld.log'. 150718 00:0 ...
- cxf笔记记录
一.Web Service框架介绍: 1. WebService框架的作用: -- WebService只是一种思想,不是一个具体的框架. -- 它也是javaEE的规范. -- 它可以跨平台(操作平 ...
- CSS3中的Transition属性详解
w3c标准中对CSS3的transition这是样描述的:“CSS的transition允许CSS的属性值在一定的时间区间内平滑地过渡.这种效果可以在鼠标单击.获得焦点.被点击或对元素任何改变中触发, ...
- 在 Vultr VPS 中 以 Debian 8 i386 (jessie) 为 操作系统 平台 手动 搭建 PPTP VPN 全过程
更新服务器并安装 PPTP 服务 apt-get update apt-get upgrade apt-get install pptpd 编辑 /etc/pptpd.conf 找到 #locali ...
- Google加强版权保护
在版权保护方面,我们一直是反面教材,而在场面上Google早已退出我们的世界,所以Google的加强版权保护对国内的互联网不会有太多的影响,即便无法在Google搜索到我们需要的XXX软件破解版,百度 ...
- Read/Write file in Android
http://www.cnblogs.com/freeliver54/archive/2011/09/16/2178910.html
- 【转】NHibernate:no persister for 异常
1.配置文件后缀名写错 mapping file 必须是.hbm.xml结尾 2.Web.config配置里面引用实体 <session-factory> <mapping asse ...
- 《Java中的抽象类及抽象类的作用》
//抽象类示例: abstract class Shape1 { { System.out.println("执行Shape的初始化块..."); } private String ...