SVG 绘制基本的几何图形

SVG 绘制基本的几何图形

  • 简介
    • SVG 是什么
    • SVG 的优点
    • 一个简单的例子
  • SVG 基本图形
    • 矩形 rect
    • 圆形 circle
    • 椭圆 ellipse
    • 线条 line
    • 多边形 polygon
    • 折线 polyline
    • 路径 path

简介

SVG 是什么

  1. SVG 全称为 Scalable Vector Graphics,即可缩放矢量图形
  2. SVG 使用 XML 格式定义图形。
  3. SVG 图像在改变尺寸或缩放的情况下其图形质量不会有所损失。
  4. SVG 是万维网联盟的标准。

SVG 的优点

  1. 可被多种工具读取和修改(如记事本程序);
  2. 与 JPEG 和 GIF 相比,尺寸更小,可压缩性更强;
  3. 可缩放;
  4. 可在任何分辨率下被高质量打印;
  5. SVG 图像中文本是可选的,同时也是可搜索的(适合制作地图);
  6. SVG 是开放的标准;
  7. SVG 是纯粹的 XML。

一个简单的例子

<?xml version="1.0" standalone="no"?>
<!-- 上面这一行为 XML声明,
     standalone 属性表明此 SVG 文件是否独立,
     或含有对外部文件的引用 -->

<!-- 这一行引用了外部的一个 DTD,
     该 DTD 位于 W3C,含所有允许的 SVG 元素 -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<!-- SVG 代码以标签 svg 开始,
     width 和 height 属性设置此 SVG 文档的宽度和高度,
     version 定义所使用的 SVG 版本,
     xmlns 可定义 SVG 命名空间 -->
<svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg">

<!-- 创建一个圆,
     (cx, cy) 定义圆心的坐标,该坐标默认为 (0, 0);
     r 定义圆的半径,
     轮廓宽度 2px,黑边框;
     填充红色-->
<circle cx="100" cy="50" r="40" stroke="black"
stroke-width="2" fill="red"/>

</svg>

将上述代码保存在后缀为 “.svg” 的文件中,然后在浏览器中打开,就能看到如下显示的一个圆形:

SVG 基本图形

SVG 有一些预定义的形状元素,可被开发者使用和操作:
· 矩形: <rect>
· 圆形: <circle>
· 椭形:<ellipse>
· 线: <line>
· 折线:<polyline>
· 多边形:<polygon>
· 路径:<path>

矩形 rect

  1. 属性
    矩形 rect 的属性
  2. 实例
<!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">

<rect width="200" height="160"
style="fill:red;stroke-width:1;stroke:black"/>
<rect x="80" y="160" width="160" height="120"
rx="20" ry="10"
style="fill:gray;stroke:black;stroke-width:2"/>

</svg>

将上述代码保存在后缀为 “.svg” 的文件中,然后在浏览器中打开,可以看到如下图形(虚线表示的是窗口,后面的例子将不再作此声明):

圆形 circle

  1. 属性
    圆形 circle 的属性
  2. 实例
<?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>

将上述代码保存在后缀为 “.svg” 的文中(比如 mycircle.svg),然后在浏览器中打开,可以看到如下图形:

椭圆 ellipse

  1. 属性
    椭圆 ellipse 的属性
  2. 实例
<?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">

<ellipse cx="120" cy="50" rx="100" ry="40" 
style="fill:rgb(200,100,50);stroke:lightblue;stroke-width:2" />

<rect x="20" y="10" width="200" height="80"
style="fill:none;stroke:lightgray;stroke-width:1" />

</svg>

上述代码在浏览器中显示的结果:

线条 line

(我认为线条和圆是最简单的两个图形应该没有人反对吧……)

  1. 属性
    线段 line 的属性
  2. 实例
<?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">

<line x1="0" y1="0" x2="300" y2="200" 
style="stroke:red;stroke-width:2" />
<line x1="300" y1="20" x2="20" y2="200" 
style="stroke:green;stroke-width:1" />

</svg>

上述代码在浏览器中显示的结果如下:

多边形 polygon

  1. 属性
    多边形 polygon 的属性
  2. 实例
<?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">

<polygon points="200,100 140,70 100,60 80,100 100,140 140,130"
style="fill:#cccccc;stroke:#005000;stroke-width:1" />

</svg>

上述代码在浏览器中显示如下:

折线 polyline

创建仅包含直线的形状。

  1. 属性
    折线 polyline 的属性
  2. 实例
<?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">

<polyline points="200,100 140,70 100,60 80,100 100,140 140,130"
style="fill:#cccccc;stroke:#005000;stroke-width:1" />

</svg>

上面的代码是不是很熟悉。没错,这是上一个例子多边形的例子,只不过是改了标签,将 polygon 改成了 polyline。在浏览器中打开上述文件,显示如下:

将显示结果和多边形的例子进行比较,可以看出,这里的曲线并没有自动闭合,但是也可以进行填充,填充的结果是首尾节点连接之后形成的闭合区域。
有一点需要注意的是,虽然这是一个未闭合的折线,但如果没有指定 填充 fill 属性,那么会自动进行填充(我这里实践结果是默认填充黑色),因此,如果不想折线默认填充的话,应该指定 fill=“none”

路径 path

路径不同于折线,折线只能包含直线(或者说线段),但是路径是可以包含曲线的。

  1. 路径支持的命令
命令命令表达
Mmoveto 起始
Llineto 直线段
Vvertical lineto 垂直线
Hhorizontal lineto 水平线
Ccurveto 三次贝塞尔曲线
Ssmooth curveto 三次贝塞尔曲线
Qquadratic Bézier curve 二次贝塞尔曲线
Tsmooth quadratic Bézier curveto 二次贝塞尔曲线
Aelliptical Arc 椭圆弧
Zclose path 闭合

命令可以使用大写字母,也可以用小写字母,区别在于大写表示绝对坐标,小写表示相对坐标。

  1. 属性
    路径 path 的属性
  2. 实例
<?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">

<path d="M 50 150 l 70 -140 l 70 140"
stroke="red" stroke-width="2" fill="none" />

<path d="M 50 150 q 70 -140 140 0"
stroke="blue" stroke-width="4" fill="yellow" />

</svg>

在浏览器中打开上述文件,显示如下:

注意,未闭合的路径也是默认填充的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/310781.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【OpenCV学习笔记08】- 图像基本操作

关于 OpenCV 官方文档的 GUI功能告一段落&#xff0c;接下来开始核心操作的学习。学习笔记中会记录官方给出的例子&#xff0c;也会给出自己根据官方的例子完成的更改代码&#xff0c;同样彩蛋的实现也会结合多个知识点一起实现一些小功能&#xff0c;来帮助我们对学会的知识点…

leetcode:LCR 159. 库存管理 III(python3解法)

难度&#xff1a;简单 仓库管理员以数组 stock 形式记录商品库存表&#xff0c;其中 stock[i] 表示对应商品库存余量。请返回库存余量最少的 cnt 个商品余量&#xff0c;返回 顺序不限。 示例 1&#xff1a; 输入&#xff1a;stock [2,5,7,4], cnt 1 输出&#xff1a;[2]示例…

通过wireshark抓取的流量还原文件(以zip为例)

wireshark打开流量包&#xff0c;通过zip关键字查找 追踪流可查看详细信息 选中media Type右键&#xff0c; 点击导出分组字节流选项 将生成的文件进行命名&#xff0c;需要时什么格式就以什么格式后缀

uniapp 字母索引列表插件(组件版) Ba-SortList

简介&#xff08;下载地址&#xff09; Ba-SortList 是一款字母索引列表组件版插件&#xff0c;可自定义样式&#xff0c;支持首字母字母检索、首字检索、搜索等等&#xff1b;支持点击事件。 支持首字母字母检索支持首字检索支持搜索支持点击事件支持长按事件支持在uniapp界…

代币中的decimal精度代表了什么

精度的意义在于允许发送小数的代币。举例&#xff0c;一个CAT代币合约的精度为6。那么 你拥有1个CAT就意味着合约中的balance 1 * 10^6 , 转账 0.1CAT出去的话&#xff0c;就需要输入 0.1*10^6 10^5。 也就时在涉及代币时&#xff0c;查询到的余额、转账的代币数量 都和 代币…

扫描错题用什么软件?分享4个好用的工具!

在学习的道路上&#xff0c;我们难免会遇到错题。有些时候&#xff0c;手抄的笔记或是纸质错题集不易携带、查找不方便&#xff0c;还容易丢失。为了解决这些问题&#xff0c;现在有许多软件可以帮助我们快速、准确地扫描错题&#xff0c;并进行整理和纠正。本文将为你介绍几款…

满足ITOM需求的网络监控工具

IT 运营管理&#xff08;ITOM&#xff09;可以定义为监督 IT 基础架构的各种物理和虚拟组件的过程;确保其性能、运行状况和可用性;并使它们能够与基础架构的其他组件无缝协作。IT 运营管理&#xff08;ITOM&#xff09;在大型 IT 管理模型中也发挥着积极作用&#xff0c;包括 I…

使用GraphQL实现简单的增删改查

使用GraphQL实现简单的增删改查 GraphQL官网&#xff1a;https://graphql.cn/ Altair Graphql 调试工具&#xff1a;https://saltair.sirmuel.design/#download 或者添加扩展使用网页版&#xff1a;https://chrome.google.com/webstore/detail/altair-graphql-client/flnheeel…

在线图表编辑工具Draw.io本地部署并结合内网穿透实现远程协作办公

前言 提到流程图&#xff0c;大家第一时间可能会想到Visio&#xff0c;不可否认&#xff0c;VIsio确实是功能强大&#xff0c;但是软件为收费&#xff0c;并且因为其功能强大&#xff0c;导致安装需要很多的系统内存&#xff0c;并且是不可跨平台使用。所以&#xff0c;今天给…

怎么处理网站的一些安全风险

随时互联网的持续发展&#xff0c;数字化转型步伐不断加快&#xff0c;社会各行业都走进了信息化、数字化。但与此同时&#xff0c;网络发展带来了许多风险&#xff0c;各行业面临着日益复杂的数据安全和网络安全威胁。其中&#xff0c;网站的安全风险持续增长&#xff0c;是各…

R语言生物群落(生态)数据统计分析与绘图教程

详情点击链接&#xff1a;R语言生物群落&#xff08;生态&#xff09;数据统计分析与绘图教程 前沿 R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂&#xff0c;涉及众多统计分析方法。 一&#xff1a;R和Rstudio及入门和作…

零基础学习数学建模——(一)什么是数学建模

本篇博客将详细介绍什么是数学建模。 文章目录 个人简介什么是数学建模&#xff08;一&#xff09;引例&#xff1a;高中数学里的简单线性规划问题数学建模的定义及用途数学建模的定义数学建模的用途 正确认识数学建模 个人简介 ​ 本人在本科阶段获得过国赛省一、mathorcup数…

【算法】基础算法001之双指针

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.数组分块&#xf…

UTONMOS:探索元宇宙,开启未来游戏新篇章

在元宇宙的世界里&#xff0c;游戏不再只是消遣&#xff0c;而是一个全新的互动世界&#xff0c;等待你来探索&#xff01; 逼真的虚拟现实技术&#xff0c;让你沉浸在充满想象力的游戏世界中&#xff0c;体验前所未有的刺激和乐趣。 与来自全球的玩家互动交流&#xff0c;结…

vue3+ts+vite中封装axios,使用方法从0到1

一、安装axios npm install axios types/axios --save二、配置代理vite.config.ts&#xff0c;如果没有需要新建该文件 module.exports {server: {proxy: {/api: {target: http://localhost:5000, // 设置代理目标changeOrigin: true, // 是否改变请求源地址rewrite: (path)…

【算法每日一练]-动态规划 (保姆级教程 篇16) #纸带 #围栏木桩 #四柱河内塔

目录 今日知识点&#xff1a; 计算最长子序列的方案个数&#xff0c;类似最短路径个数问题 四柱河内塔问题&#xff1a;dp[i]min{ (p[i-k]f[k])dp[i-k] } 纸带 围栏木桩 四柱河内塔 纸带 思路&#xff1a; 我们先设置dp[i]表示从i到n的方案数。 那么减法操作中&#xff…

Kafka消息存储

一、层次结构 具体到某个broker上则是, 数据目录/分区名/日志相关文件集合。其中日志文件集合内包括.log文件, index索引文件和.timeindex时间戳索引文件。 二、.log 结构 .log中记录具体的消息。一般消息由header和body组成, 这点儿在Kafka消息中也同样适用。 message MES…

视角与焦距

视角与焦距关系 视角与焦距之间存在密切的关系。在摄影和摄像领域,这两个概念都非常重要。 视角是指相机镜头所能覆盖的视野范围,通常以度数来表示。焦距则是从镜头到成像平面的距离,决定了拍摄的物体在成像平面上的大小。 焦距越短,视角就越大,拍到的画面就越宽广;焦距…

雪王IP +出海,是蜜雪冰城登陆港交所想讲的“新故事”?

霸屏互联网的“雪王”&#xff0c;如今身影出现在港交所。这一次&#xff0c;“雪王”除了出街的气派&#xff0c;也给市场打开了更多的想象空间。 据招股书数据&#xff0c;2023年前三个季度&#xff0c;蜜雪冰城营收同比增加近50%。如今看来&#xff0c;无论是品牌影响力&am…

【数据库学习】ClickHouse(ck)

1&#xff0c;ClickHouse&#xff08;CK&#xff09; 是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。 1&#xff09;特性 按列存储&#xff0c;列越多速度越慢&#xff1b; 按列存储&#xff0c;数据更容易压缩&#xff08;类型相同、区分度&#xff09;&#xff1b…