svg

简介: svg

摘要:


  

之前介绍了canvas制作图像,今天再分享svg制作图像。


简介:


  

SVG 意为可缩放矢量图形(Scalable Vector Graphics)。SVG 使用 XML 格式定义图像。svg具有以下优势:


  • SVG 可被非常多的工具读取和修改(比如记事本)
  • SVG 与 JPEG 和 GIF 图像比起来,尺寸更小,且可压缩性更强。
  • SVG 是可伸缩的
  • SVG 图像可在任何的分辨率下被高质量地打印
  • SVG 可在图像质量不下降的情况下被放大
  • SVG 图像中的文本是可选的,同时也是可搜索的(很适合制作地图)
  • SVG 可以与 Java 技术一起运行
  • SVG 是开放的标准
  • SVG 文件是纯粹的 XML


与 Flash 相比,SVG 最大的优势是与其他标准(比如 XSL 和 DOM)相兼容。而 Flash 则是未开源的私有技术。


查看与编辑:


  

现在主流浏览器都支持svg,可以通过浏览器直接浏览效果。如需查看 SVG 源代码,可以在任何编辑器上查看,如notepad,sublime text等,如果是在浏览器中然后在窗口中右键单击,选择“查看源代码”。任何编辑器都可以编辑,文件后缀为svg。


浏览器:


image.png


实例:



<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<circle cx="100" cy="50" r="40" stroke="black"
stroke-width="2" fill="red"/>
</svg>


standalone 属性规定此 SVG 文件是否是“独立的”,或含有对外部文件的引用。

standalone="no" 意味着 SVG 文档会引用一个外部文件 - 在这里,是 DTD 文件。第二和第三行引用了这个外部的 SVG DTD。该 DTD 位于 “http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd”。该 DTD 位于 W3C,含有所有允许的 SVG 元素。SVG 代码以 <svg> 元素开始,包括开启标签 <svg> 和关闭标签 </svg> 。这是根元素。width 和 height 属性可设置此 SVG 文档的宽度和高度。version 属性可定义所使用的 SVG 版本,xmlns 属性可定义 SVG 命名空间。SVG 的 <circle> 用来创建一个圆。cx 和 cy 属性定义圆中心的 x 和 y 坐标。如果忽略这两个属性,那么圆点会被设置为 (0, 0)。r 属性定义圆的半径。stroke 和 stroke-width 属性控制如何显示形状的轮廓。我们把圆的轮廓设置为 2px 宽,黑边框。fill 属性设置形状内的颜色。我们把填充颜色设置为红色。


HTML中引用svg:


    

SVG 文件可通过以下标签嵌入 HTML 文档:<embed>、<object> 或者 <iframe>。


embed:


<embed src="circle.svg" width="300" height="100" type="image/svg+xml" pluginspage="http://www.adobe.com/svg/viewer/install/" />

 

<embed> 标签被所有主流的浏览器支持,并允许使用脚本。当在 HTML 页面中嵌入 SVG 时使用 <embed> 标签是 Adobe SVG Viewer 推荐的方法!然而,如果需要创建合法的 XHTML,就不能使用 <embed>。任何 HTML 规范中都没有 <embed> 标签。

pluginspage 属性指向下载插件的 URL。


object:


<object data="circle.svg" width="300" height="100" type="image/svg+xml" codebase="http://www.adobe.com/svg/viewer/install/" />

  

<object> 标签是 HTML 4 的标准标签,被所有较新的浏览器支持。它的缺点是不允许使用脚本。假如您安装了最新版本的 Adobe SVG Viewer,那么当使用 <object> 标签时 SVG 文件无法工作(至少不能在 IE 中工作)!codebase 属性指向下载插件的 URL。

iframe:


<iframe src="circle.svg" width="300" height="100"></iframe>

<iframe> 标签可工作在大部分的浏览器中。


直接嵌入:


<svg width="100%" height="100%" version="1.1"

       xmlns="http://www.w3.org/2000/svg">

       <circle cx="100" cy="50" r="40" stroke="black"

       stroke-width="2" fill="red"/>

       </svg>


可以直接将svg标签嵌入到html的body中。


svg平面图形:



长方形:


<svg width="100%" height="100%" version="1.1"
        xmlns="http://www.w3.org/2000/svg">
        <rect width="300" height="100"
        style="fill:red;stroke-width:1;
        stroke:rgb(0,0,0)"/>


<!-- rect元素的width和height属性可定义矩形的高度和宽度,style属性用来定义 CSS 属性,fill属性定义矩形的填充颜色,stroke-width属性定义矩形边框的宽度,stroke属性定义矩形边框的颜色 -->


       </svg>

image.png


正方形:


 
         


image.png

三角形:


<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
        <polygon points="100,10 50,100 150,100" style="fill:red;stroke:#000000;stroke-width:1"/>
        <!-- points 属性定义多边形每个角的 x 和 y 坐标,以空格分开 -->
        </svg>


image.png

圆形:


<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
        <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red"/>
        <!-- cx和cy属性定义圆点的x和y坐标。如果省略cx和cy,圆的中心会被设置为(0, 0),r属性定义圆的半径。 -->
        </svg>


image.pngimage.pngimage.pngimage.png

image.png

椭圆:


<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
        <ellipse cx="100" cy="80" rx="80" ry="50" style="fill:red;stroke:#000;stroke-width:2"/>
        <!-- cx 属性定义圆点的 x 坐标,cy 属性定义圆点的 y 坐标,rx 属性定义水平半径,ry 属性定义垂直半径 -->
        </svg>

image.png

线:


<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
        <line x1="0" y1="0" x2="300" y2="300" style="stroke:red;stroke-width:2"/>
        <!-- x1 属性在 x 轴定义线条的开始,y1 属性在 y 轴定义线条的开始,x2 属性在 x 轴定义线条的结束,y2 属性在 y 轴定义线条的结束 -->
        </svg>


 image.png

折线:


<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
        <polyline points="0,0 0,20 20,20 20,40 40,40 40,60" style="fill:white;stroke:red;stroke-width:2"/>
        </svg>

image.png


螺旋线:


<svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg">
        <path d="M153 334
        C153 334 151 334 151 334
        C151 339 153 344 156 344
        C164 344 171 339 171 334
        C171 322 164 314 156 314
        C142 314 131 322 131 334
        C131 350 142 364 156 364
        C175 364 191 350 191 334
        C191 311 175 294 156 294
        C131 294 111 311 111 334
        C111 361 131 384 156 384
        C186 384 211 361 211 334
        C211 300 186 274 156 274"
        style="fill:white;stroke:red;stroke-width:2"/>
        <!-- M = moveto,L = lineto,H = horizontal lineto,V = vertical lineto,C = curveto,S = smooth curveto,Q = quadratic Belzier curve,T = smooth quadratic Belzier curveto,A = elliptical Arc,Z = closepath -->
        </svg>

image.png

相关文章
|
JSON 算法 物联网
物联网中利用OTA技术升级的基本原理与方法
物联网中利用OTA技术升级的基本原理与方法
696 0
CAN总线位时序的介绍
CAN总线利用CAN_H和CAN_L线的电位差传输数据,显性电平(0,2.5V差值)对应逻辑0,隐性电平(1,0V差值)对应逻辑1。由于NRZ无返回零通信方式,同步是个挑战,特别是距离远时。为解决同步问题,CAN总线采用硬件同步和再同步技术,位时序分为同步段、传播段、两个相位缓冲段,每个段由Tq时间量子构成,允许调整以确保多个单元间的同步采样。
631 0
|
人工智能 关系型数据库 分布式数据库
沉浸式学习PostgreSQL|PolarDB 9: AI大模型+向量数据库, 提升AI通用机器人在专业领域的精准度, 完美诠释柏拉图提出的“知识是回忆而不是知觉”
越来越多的企业和个人希望能够利用LLM和生成式人工智能来构建专注于其特定领域的具备AI能力的产品。目前,大语言模型在处理通用问题方面表现较好,但由于训练语料和大模型的生成限制,对于垂直专业领域,则会存在知识深度和时效性不足的问题。在信息时代,由于企业的知识库更新频率越来越高,并且企业所拥有的垂直领域知识库(例如文档、图像、音视频等)往往是未公开或不可公开的。因此,对于企业而言,如果想在大语言模型的基础上构建属于特定垂直领域的AI产品,就需要不断将自身的知识库输入到大语言模型中进行训练。
1758 0
|
缓存 负载均衡 应用服务中间件
nginx配置域名转发、反向代理、负载均衡
本文是博主学习nginx的记录,希望对大家有所帮助。
3641 0
|
存储 数据采集 数据可视化
认识DataHub:企业级数据管理的第一步
【10月更文挑战第23天】在数字化转型的时代,数据管理成为了企业发展的核心竞争力之一。如何高效地管理和利用海量数据,成为了每个企业都需要面对的问题。DataHub作为一款企业级数据管理平台,以其强大的功能和灵活的架构,为企业提供了一站式的数据管理解决方案。作为一名数据管理爱好者,我将从个人的角度出发,详细介绍DataHub的基本概念、主要功能、应用场景,以及为什么选择DataHub作为数据管理解决方案。此外,我还会提供简单的安装指南和快速入门教程,帮助初学者快速上手使用DataHub。
1628 1
|
11月前
|
前端开发 安全 Java
Manland:开源即生产力!避免90%新手踩坑!这套租房系统“房东/租客/管理三端”开源方案提升开发效率300%
今天介绍一款基于SpringBoot的房屋租赁系统——Manland,涵盖管理员、房东、租客三大角色,提供房屋管理、订单处理、权限控制等功能。采用MyBatis、Shiro、Thymeleaf等技术,确保系统高效安全。
373 0
|
11月前
|
人工智能 Java 程序员
一文彻底搞明白二极管
本文介绍了二极管的基本原理、特性、分类及应用场景,帮助读者深入了解这一重要电子元件。
2243 0
|
资源调度 JavaScript 前端开发
|
JavaScript 前端开发
javascript获取url信息的常见方法
javascript获取url信息的常见方法
670 2
|
存储 SQL 数据库连接
数据输入输出概念详解与代码示例
在编程领域,数据的输入与输出是极为关键的环节,它们构成了程序与外界交互的桥梁。数据的输入是指程序从外部获取数据的过程,而数据的输出则是程序将处理后的数据展现给外部用户或系统的过程。了解并掌握数据输入输出的概念对于编写高效、实用的程序至关重要。
480 0