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

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

一:什么是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>
 

转载请务必注明出处

相关文章
|
12天前
|
安全 API 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
在当前的Web开发中,Python因能构建高效简洁的RESTful API而备受青睐,大大提升了开发效率和用户体验。本文将介绍RESTful API的基本原则及其在Python中的实现方法。以Flask为例,演示了如何通过不同的HTTP方法(如GET、POST、PUT、DELETE)来创建、读取、更新和删除用户信息。此示例还包括了基本的路由设置及操作,为开发者提供了清晰的API交互指南。
52 6
|
11天前
|
存储 JSON API
实战派教程!Python Web开发中RESTful API的设计哲学与实现技巧,一网打尽!
在数字化时代,Web API成为连接前后端及构建复杂应用的关键。RESTful API因简洁直观而广受欢迎。本文通过实战案例,介绍Python Web开发中的RESTful API设计哲学与技巧,包括使用Flask框架构建一个图书管理系统的API,涵盖资源定义、请求响应设计及实现示例。通过准确使用HTTP状态码、版本控制、错误处理及文档化等技巧,帮助你深入理解RESTful API的设计与实现。希望本文能助力你的API设计之旅。
34 3
|
12天前
|
JSON API 数据库
从零到英雄?一篇文章带你搞定Python Web开发中的RESTful API实现!
在Python的Web开发领域中,RESTful API是核心技能之一。本教程将从零开始,通过实战案例教你如何使用Flask框架搭建RESTful API。首先确保已安装Python和Flask,接着通过创建一个简单的用户管理系统,逐步实现用户信息的增删改查(CRUD)操作。我们将定义路由并处理HTTP请求,最终构建出功能完整的Web服务。无论是初学者还是有经验的开发者,都能从中受益,迈出成为Web开发高手的重要一步。
36 4
|
10天前
|
开发框架 JSON 缓存
震撼发布!Python Web开发框架下的RESTful API设计全攻略,让数据交互更自由!
在数字化浪潮推动下,RESTful API成为Web开发中不可或缺的部分。本文详细介绍了在Python环境下如何设计并实现高效、可扩展的RESTful API,涵盖框架选择、资源定义、HTTP方法应用及响应格式设计等内容,并提供了基于Flask的示例代码。此外,还讨论了版本控制、文档化、安全性和性能优化等最佳实践,帮助开发者实现更流畅的数据交互体验。
31 1
|
12天前
|
JSON API 开发者
惊!Python Web开发新纪元,RESTful API设计竟能如此性感撩人?
在这个Python Web开发的新纪元里,RESTful API的设计已经超越了简单的技术实现,成为了一种追求极致用户体验和开发者友好的艺术表达。通过优雅的URL设计、合理的HTTP状态码使用、清晰的错误处理、灵活的版本控制以及严格的安全性措施,我们能够让RESTful API变得更加“性感撩人”,为Web应用注入新的活力与魅力。
30 3
|
14天前
|
JSON API 数据格式
深度剖析!Python Web 开发中 RESTful API 的每一个细节,你不可不知的秘密!
在 Python Web 开发中,RESTful API 是构建强大应用的关键,基于 Representational State Transfer 架构风格,利用 HTTP 卞性能。通过 GET、POST、PUT 和 DELETE 方法分别实现资源的读取、创建、更新和删除操作。示例代码展示了如何使用 Flask 路由处理这些请求,并强调了状态码的正确使用,如 200 表示成功,404 表示未找到资源等。
37 5
|
23天前
|
存储
在 Web 中判断页面是不是刷新
【9月更文挑战第10天】在Web开发中,判断页面是否刷新有多种方法:1) 监听`popstate`事件,检测用户是否通过历史记录访问页面;2) 记录并比较页面加载时间戳,若相差极小,则可能为刷新;3) 利用本地存储设置特定值,若该值不存在或不符合预期,则页面可能被刷新。然而,这些方法并非绝对准确。
html,web页面朗读文字,朗读中文,朗读英文
html,web页面朗读文字,朗读中文,朗读英文
|
2月前
|
数据处理 开发者 UED
FastAPI 的模板引擎简直太神奇啦!这就是构建动态 Web 页面的终极秘籍,快来一探究竟!
【8月更文挑战第31天】FastAPI 是一款高性能异步 Web 框架,可通过集成模板引擎(如 Jinja2 或 Mako)实现动态页面渲染。使用模板引擎可分离页面结构与数据,简化代码并提升可维护性。此外,它还提供丰富的语法支持,如循环和条件判断,从而增强页面展示效果及开发效率。通过简单的配置步骤,即可在 FastAPI 中启用模板引擎,显著改善用户体验。
142 1
|
2月前
|
存储 消息中间件 前端开发
Web2py框架下的神秘力量:如何轻松集成第三方API,让你的应用不再孤单!
【8月更文挑战第31天】在开发现代Web应用时,常需集成第三方服务如支付网关、数据存储等。本文将指导你使用Web2py框架无缝接入第三方API。通过实例演示从注册获取API密钥、创建控制器、发送HTTP请求到处理响应的全过程。利用`requests`库与Web2py的内置功能,轻松实现API交互。文章详细介绍了如何编写RESTful控制器,处理API请求及响应,确保数据安全传输。通过本教程,你将学会如何高效整合第三方服务,拓展应用功能。欢迎留言交流心得与建议。
37 1
下一篇
无影云桌面