转自: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 图形滤镜实现高斯模糊:

  1. <div id="blur-image-demo">
  2. <div id="left" style="width:20%;"><img src="woniu.png" alt="Original image" width="325" height="471"></div>
  3. <div id="right" style="width:80%;">
  4. <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
  5. <defs>
  6. <filter id="f1" x="0" y="0">
  7. <feGaussianBlur in="SourceGraphic" stdDeviation="5" />
  8. </filter>
  9. </defs>
  10. <image x="0" y="0" width="325" height="471" xlink:href="woniu.png" filter="url(#f1)"/>
  11. </svg>
  12. </div>
  13. </div>

运行效果:

源代码,可以copy直接运行

JavaScript部分

  1. window.onload = function() {
  2. // get DIV
  3. var container = document.getElementById("svgContainer");
  4. // create svg object
  5. var mySvg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
  6. mySvg.setAttribute("version", "1.2");// IE9+ support SVG 1.1 version
  7. mySvg.setAttribute("baseProfile", "tiny");
  8. container.appendChild(mySvg);
  9. // create svg shape - rectangle
  10. var c1 = document.createElementNS("http://www.w3.org/2000/svg", "rect");
  11. c1.setAttribute("x", "20");
  12. c1.setAttribute("y", "20");
  13. c1.setAttribute("width", "150");
  14. c1.setAttribute("height", "150");
  15. c1.setAttribute("fill", "rgb(0,0,255)");
  16. c1.setAttribute("stroke", "rgb(0,0,0)");
  17. c1.setAttribute("stroke-width", "4");
  18. mySvg.appendChild(c1);
  19. // create svg shape - circle
  20. var c2 = document.createElementNS("http://www.w3.org/2000/svg", "circle");
  21. c2.setAttribute("cx", "250");
  22. c2.setAttribute("cy", "100");
  23. c2.setAttribute("r", "60");
  24. c2.setAttribute("fill", "#996699");
  25. c2.setAttribute("stroke", "#AA99FF");
  26. c2.setAttribute("stroke-width", "7");
  27. mySvg.appendChild(c2);
  28. // create svg shape - ellipse
  29. var c3 = document.createElementNS("http://www.w3.org/2000/svg", "ellipse");
  30. c3.setAttribute("cx", "450");
  31. c3.setAttribute("cy", "100");
  32. c3.setAttribute("rx", "100");
  33. c3.setAttribute("ry", "50");
  34. c3.setAttribute("fill", "#FF0000");
  35. c3.setAttribute("stroke", "purple");
  36. c3.setAttribute("stroke-width", "3");
  37. mySvg.appendChild(c3);
  38. // create svg shape - draw lines
  39. for(var i=0; i<10; i++)
  40. {
  41. var sline = document.createElementNS("http://www.w3.org/2000/svg", "line");
  42. var x1 = 580 + i*10;
  43. console.log(x1);
  44. sline.setAttribute("x1", x1.toString());
  45. sline.setAttribute("y1", "10");
  46. sline.setAttribute("x2", x1.toString());
  47. sline.setAttribute("y2", "180");
  48. sline.setAttribute("stroke", "rgb(0,255,0)");
  49. sline.setAttribute("stroke-width", "2");
  50. mySvg.appendChild(sline);
  51. }
  52. // SVG draw text
  53. var stext = document.createElementNS("http://www.w3.org/2000/svg", "text");
  54. stext.setAttribute("x", "700");
  55. stext.setAttribute("y", "100");
  56. stext.setAttribute("font-size", "18px");
  57. stext.setAttribute("fill", "#FF0000");
  58. var textString = document.createTextNode("Hello SVG");
  59. stext.appendChild(textString);
  60. mySvg.appendChild(stext);
  61. // mouse event handling
  62. c1.addEventListener("click", changeColor, false);
  63. c2.addEventListener("mouseup", changeColor, false);
  64. };
  65. function changeColor(evt) {
  66. var target = evt.target;
  67. target.setAttributeNS(null, "fill", "green");
  68. }

HTML部分:

  1. <html>
  2. <head>
  3. <title>Gloomyfish SVG Demo</title>
  4. <style>
  5. #svgContainer {
  6. width:800px;
  7. height:200px;
  8. background-color:#EEEEEE;
  9. }
  10. #left { float: left;}
  11. #right { float: right;}
  12. </style>
  13. </head>
  14. <body>
  15. <div id="svgContainer"></div>
  16. <div id="blur-image-demo">
  17. <div id="left" style="width:20%;"><img src="woniu.png" alt="Original image" width="325" height="471"></div>
  18. <div id="right" style="width:80%;">
  19. <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
  20. <defs>
  21. <filter id="f1" x="0" y="0">
  22. <feGaussianBlur in="SourceGraphic" stdDeviation="5" />
  23. </filter>
  24. </defs>
  25. <image x="0" y="0" width="325" height="471" xlink:href="woniu.png" filter="url(#f1)"/>
  26. </svg>
  27. </div>
  28. </div>
  29. </body>
  30. </html>

转载请务必注明出处

基于SVG的web页面图形绘制API介绍的更多相关文章

  1. 基于视觉的Web页面分页算法VIPS的实现源代码下载

    基于视觉的Web页面分页算法VIPS的实现源代码下载 - tingya的专栏 - 博客频道 - CSDN.NET 基于视觉的Web页面分页算法VIPS的实现源代码下载 分类: 技术杂烩 2006-04 ...

  2. 基于svg.js实现对图形的拖拽、选择和编辑操作

    本文主要记录如何使用 svg.js 实现对图形的拖拽,选择,图像渲染及各类形状的绘制操作. 1.关于SVG SVG 是可缩放的矢量图形,使用XML格式定义图像,可以生成对应的DOM节点,便于对单个图形 ...

  3. SVG 2D入门2 - 图形绘制

    基本形状 SVG提供了很多的基本形状,这些元素可以直接使用,这一点比canvas好多了.废话不说了,直接看例子,这个最直接:   <svg width="200" heigh ...

  4. d3.js 之SVG:矢量化图形绘制

    SVG Scalable Vector Graphics 是一个成熟的W3C标准,被设计用来在web和移动平台 上展示可交互的图形.和HTML类似,SVG也支持CSS和JavaScript.尽管可以使 ...

  5. JAVA WEB学习笔记(三):简单的基于Tomcat的Web页面

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  6. QQ音乐Android客户端Web页面通用性能优化实践

    QQ音乐 Android 客户端的 Web 页面日均 PV 达到千万量级,然而页面的打开耗时与 Native 页面相距甚远,需要系统性优化.本文将介绍 QQ 音乐 Android 客户端在进行 Web ...

  7. 基于图形检测API(shape detection API)的人脸检测

    原文:https://paul.kinlan.me/face-detection/ 在 Google 开发者峰会中,谷歌成员 Miguel Casas-Sanchez 跟我说:"嘿 Paul ...

  8. 创建基于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. ...

  9. 基于Metronic的Bootstrap开发框架经验总结(9)--实现Web页面内容的打印预览和保存操作

    在前面介绍了很多篇相关的<Bootstrap开发框架>的系列文章,这些内容基本上覆盖到了我这个Bootstrap框架的各个主要方面的内容,总体来说基本达到了一个稳定的状态,随着时间的推移可 ...

随机推荐

  1. mongodb unclean shutdown 修复方法

    启动mongodb时,提示Unclean shutdown detected mongodb,解决方法很简单 mongod --repair --dbpath D:\MongoDB\data\db

  2. EasyUI-panel 内嵌页面上的js无法被执行

    声明: http://www.jeasyuicn.com/post-49.html 本文引用自GodSon的杰作 http://www.jeasyuicn.com/post-49.html,除修正了个 ...

  3. row_number() OVER(PARTITION BY)函数介绍

      OVER(PARTITION BY)函数介绍 开窗函数               Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个 ...

  4. Struts2+Hibernate+Spring 整合示例[转]

    原文 http://blog.csdn.net/tkd03072010/article/details/7468769 Spring整合Struts2.Hibernate原理概述: 从用户角度来看,用 ...

  5. iOS开发Swift篇—(五)元组类型

    iOS开发Swift篇—(五)元组类型 一.元组类型介绍 1.什么是元组类型 元组类型由 N个 任意类型的数据组成(N >= 0),组成元组类型的数据可以称为“元素” 示例: let posit ...

  6. ajax转换成json参数

    //提交表单 $('#submit').click(function(){ var datas = $("#iform").serializeJson(); datas.actio ...

  7. Node.js 文件系统

    Node.js 文件系统封装在 fs 模块是中,它提供了文件的读取.写入.更名.删除.遍历目录.链接等POSIX 文件系统操作. 与其他模块不同的是,fs 模块中所有的操作都提供了异步的和 同步的两个 ...

  8. String类实现

    String类是应用框架中不可或缺的类 重载运算符实现字符串的操作 #idndef IOTECK_STRING_H_#define IOTECK_STRING_H_namespace iotek{ c ...

  9. css定位之绝对定位

    绝对定位可以做很多事情,如广告位,弹出框,遮罩层等一些功能 css的定位方式:1.静态定位, 2.绝对定位(固定定位和绝对定位) ,3.相对定位 绝对定位会受到影响的因素有 1.属性的取值. 2.元素 ...

  10. C#学习笔记----枚举、结构、方法及构造函数的总结

    一.枚举 语法: [public] enum 枚举名 { 值1, 值2, 值3, ........ } public:访问修饰符.公开的公共的,哪都可以访问. enum:关键字,声明枚举的关键字 枚举 ...