基于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>
 

转载请务必注明出处

相关文章
|
1月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
46 4
|
1月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
109 3
|
16天前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
31 1
|
23天前
|
JSON API 数据格式
如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架
本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了示例代码。通过这些步骤,读者可以快速上手构建自己的RESTful API。
27 2
|
1月前
|
监控 负载均衡 API
Web、RESTful API 在微服务中有哪些作用?
在微服务架构中,Web 和 RESTful API 扮演着至关重要的角色。它们帮助实现服务之间的通信、数据交换和系统的可扩展性。
48 2
|
1月前
|
人工智能 搜索推荐 API
用于企业AI搜索的Bocha Web Search API,给LLM提供联网搜索能力和长文本上下文
博查Web Search API是由博查提供的企业级互联网网页搜索API接口,允许开发者通过编程访问博查搜索引擎的搜索结果和相关信息,实现在应用程序或网站中集成搜索功能。该API支持近亿级网页内容搜索,适用于各类AI应用、RAG应用和AI Agent智能体的开发,解决数据安全、价格高昂和内容合规等问题。通过注册博查开发者账户、获取API KEY并调用API,开发者可以轻松集成搜索功能。
|
1月前
|
编解码 前端开发 JavaScript
使用 CSS 打印样式为 Web 页面设置专业的打印机效果
使用 CSS 打印样式为 Web 页面设置专业的打印机效果
54 2
|
1月前
|
前端开发 JavaScript API
惊呆了!学会AJAX与Fetch API,你的Python Web项目瞬间高大上!
在Web开发领域,AJAX与Fetch API是提升交互体验的关键技术。AJAX(Asynchronous JavaScript and XML)作为异步通信的先驱,通过XMLHttpRequest对象实现了局部页面更新,提升了应用流畅度。Fetch API则以更现代、简洁的方式处理HTTP请求,基于Promises提供了丰富的功能。当与Python Web框架(如Django、Flask)结合时,这两者能显著增强应用的响应速度和用户体验,使项目更加高效、高大上。
51 2
|
1月前
|
前端开发 API 开发者
从零到精通,AJAX与Fetch API让你的Python Web前后端交互无所不能!
从零到精通,AJAX与Fetch API让你的Python Web前后端交互无所不能!
43 3
|
1月前
|
移动开发 前端开发 JavaScript
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
170 0

热门文章

最新文章