前端如何绘制svg格式图片?
myzbx 2024-12-05 14:47 16 浏览
我们经常在一些页面中遇见svg格式的绘图,通常是一脸懵逼,别急,看完这篇文章你就能很好地了解它了。
一、svg简介。
SVG 意为可缩放矢量图形(Scalable Vector Graphics),是使用 XML 来描述二维图形和绘图程序的语言,后缀是“.svg”。它的优点是图像在放大或改变尺寸的情况下其图形质量不会有所损失。
二、svg文件如何嵌入HTML文件。
SVG 文件可通过以下标签嵌入 HTML 文档:<embed>、<object> 或者 <iframe>。但是在html5中,直接用内联的方式嵌入,方便太多了。各种方式的嵌入如下:
// 使用 <embed> 标签
<embed
src="rect.svg"
width="300"
height="100"
type="image/svg+xml"
pluginspage="http://www.adobe.com/svg/viewer/install/"
/>
// 使用 <object> 标签
<object
data="rect.svg"
width="300"
height="100"
type="image/svg+xml"
codebase="http://www.adobe.com/svg/viewer/install/"
/>
// 使用 <iframe> 标签
<iframe src="rect.svg" width="300" height="100"></iframe>
// 在 HTML5 中, SVG 元素直接嵌入 HTML 页面中
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="190">
<polygon
points="100,10 40,180 190,60 10,60 160,180"
style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;"
/>
</svg>
三、基本图形绘制(h5中的嵌入方式做演示)。
1.矩形
<svg>
<rect width="300" height="100" style="fill:rgb(0,0,255);stroke-width:1;stroke:rgb(0,0,0)"/>
</svg>
// width="矩形的宽度"。必需的。
// height="矩形的高度"。必需的。
// x="矩形的左上角的x轴"
// y="矩形的左上角的y轴"
// rx="x轴的半径(round元素)"
// ry="y轴的半径(round元素)"
// + 显现属性:Color, FillStroke, Graphics
2.圆形
<svg>
<circle cx="100" cy="50" r="40" stroke="black"
stroke-width="2" fill="red"/>
</svg>
// cx="圆的x轴坐标"
// cy="圆的y轴坐标"
// r="圆的半径". 必需.
// + 显现属性:颜色,FillStroke,图形
3.椭圆
<svg>
<ellipse cx="300" cy="80" rx="100" ry="50"
style="fill:yellow;stroke:purple;stroke-width:2"/>
</svg>
// cx="椭圆x轴坐标"
// cy="椭圆y轴坐标"
// rx="沿x轴椭圆形的半径"。必需。
// ry="沿y轴长椭圆形的半径"。必需。
// + 显现属性:颜色,FillStroke,图形
4.直线
<svg>
<line x1="0" y1="0" x2="200" y2="200"
style="stroke:rgb(255,0,0);stroke-width:2"/>
</svg>
// x1="直线起始点x坐标"
// y1="直线起始点y坐标"
// x2="直线终点x坐标"
// y2="直线终点y坐标"
// + 显现属性:Color, FillStroke, Graphics, Markers
5.多边形
<svg>
<polygon points="200,10 250,190 160,210"
style="fill:lime;stroke:purple;stroke-width:1"/>
</svg>
// points="多边形的点。点的总数必须是偶数"。必需的。
// fill-rule="FillStroke演示属性的部分"
// + 显现属性:Color, FillStroke, Graphics, Markers
6.多段线
<svg>
<polyline points="20,20 40,25 60,40 80,120 120,140 200,180"
style="fill:none;stroke:black;stroke-width:3" />
</svg>
// points=折线上的"点"。必需的。
// + 显现属性:Color, FillStroke, Graphics, Markers
7.路径
<svg>
<path d="M150 0 L75 200 L225 200 Z" />
</svg>
// d="定义路径指令"
// pathLength="如果存在,路径将进行缩放,以便计算各点相当于此值的路径长度"
// transform="转换列表"
// + 显现属性:Color, FillStroke, Graphics, Markers
8.文本
<svg>
<text x="0" y="15" fill="red">这是文本</text>
</svg>
// x="列表的X -轴的位置。在文本中在第n个字符的位置在第n个x轴。如果后面存在额外的字符,耗尽他们最后一个字符之后放置的位置。 0是默认"
// y="列表的Y轴位置。(参考x)0是默认"
// dx="在字符的长度列表中移动相对最后绘制标志符号的绝对位置。(参考x)"
// dy="在字符的长度列表中移动相对最后绘制标志符号的绝对位置。(参考x)"
// rotate="一个旋转的列表。第n个旋转是第n个字符。附加字符没有给出最后的旋转值"
// textLength="SVG查看器将尝试显示文本之间的间距/或字形调整的文本目标长度。(默认:正常文本的长度)"
// lengthAdjust="告诉查看器,如果指定长度就尝试进行调整用以呈现文本。这两个值是'spacing'和'spacingAndGlyphs'"
// + 显现属性:Color, FillStroke, Graphics, FontSpecification, TextContentElements
四、高级特效。
主要分滤镜和渐变效果。
<defs> 和 <filter>
所有互联网的SVG滤镜定义在<defs>元素中。<defs>元素定义短并含有特殊元素(如滤镜)定义。<filter>标签用来定义SVG滤镜。<filter>标签使用必需的id属性来定义向图形应用哪个滤镜。
1.滤镜可以做一些模糊的效果和阴影,效果有很多,也可以自己尝试地做一做。
比如做个简单的边缘模糊效果。
<svg>
<defs>
<filter id="f1" x="0" y="0">
<feGaussianBlur in="SourceGraphic" stdDeviation="15" /> //<feGaussianBlur> 元素是用于创建模糊效果
</filter>
</defs>
<rect width="90" height="90" stroke="green" stroke-width="3" fill="green" filter="url(#f1)" />
</svg>
2.渐变有线性渐变,放射性渐变,下面是个线性渐变的例子。
<svg>
<defs>
<linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:rgb(255,255,0);stop-opacity:1" />
<stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1" />
</linearGradient>
</defs>
<rect width="200" height="90" fill="url(#grad1)" />
</svg>
// 把上面的
<linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%">
......
</linearGradient>
// 替换成
<radialGradient id="grad1" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
<stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:0" />
<stop offset="100%" style="stop-color:rgb(0,0,255);stop-opacity:1" />
</radialGradient>
// 变成放射性渐变
众多示例:https://www.runoob.com/svg/svg-examples.html
五、svg和canvas比较。
SVG 是一种使用 XML 描述 2D 图形的语言。 SVG DOM 中的每个元素都是可用的。它的绘制不依赖分辨率,可以为某个元素附加 JavaScript 事件处理器,不过事件添加过多会影响渲染速度。如果 SVG 对象的属性发生变化,浏览器能够自动重现图形。最适合带有大型渲染区域的应用程序(比如谷歌地图)。
Canvas 通过 JavaScript 来绘制 2D 图形。它的绘制是依赖分辨率的,不能单独为其中元素添加事件。在 canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注。如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象。能够以 .png 或 .jpg 格式保存结果图像。最适合图像密集型的游戏,其中的许多对象会被频繁重绘
相关推荐
- Luminati代理动态IP教程指南配置代理VMLogin中文版反指纹浏览器
-
介绍如何使用在VMLogin中文版设置Luminati代理。首先下载VMLogin中文版反指纹浏览器(https://cn.vmlogin.com)对于刚接触Luminati动态ip的朋友,是不是不懂...
- 文档中图形及子图形的处理(word中的图形对象有何特点)
-
【分享成果,随喜正能量】走得越远,见识越多,认识的人越多,你就越能体会到,人这一辈子,你真的在意的,同时又在意你的人,就那么几个,这几个人,就是你全部的世界。三两知己,爱人在侧,父母康健,听起来平淡无...
- Python爬虫破解滑动验证码教程(python绕过滑动验证码)
-
破解滑动验证码通常需要结合图像识别和模拟人类操作,以下是分步骤的解决方案:1.分析验证码类型缺口识别型:背景图带缺口,滑块图带凸块轨迹验证型:除了位置还需模拟人类移动轨迹2.获取验证码图片方法一:...
- 「教程」5 分钟带你入门 kivy(新手kp教学)
-
原创:星安果AirPythonkivy语言通过编写界面UI,然后利用Python定义一些业务逻辑,可以移植很多功能模块到移动端直接执行。下面对kivy常见用法做一个汇总。1、什么是...
- 比呀比: Fossil Estate Canvas EW 男式复古邮差包 $70.99
-
Fossil是一个来自美国的全球性生活时尚品牌,始建于1984年,专注于时尚配件,是第一个将手表的价值与款式完美结合的美国品牌,如今Fossil已跃身成为美国最受欢迎的品牌之一。这款FossilE...
- 智能教学:如何在网上授课(网上授课怎么弄)
-
摘要:因为担心传统课堂可能会传播冠状病毒,许多大学已经开始在网上授课。耶鲁-新加坡国立大学的讲师凯瑟琳·谢伊·桑格(CatherineSheaSanger)解释了如何快速而有效地做到这一点。当新型冠...
- wxPython库教程系列之图片:托盘图标和图片缩放、移动
-
1概要:=====1.1托盘图标设置1.2普通图片显示:原图显示,缩放显示,窗口与图片大小相互适应。1.3按钮图片设置1.4移动图片和zoom菜单按钮联动设置2托盘图标:========2...
- UE4渲染目标开发教程(ue4渲染效果图质量怎么样)
-
渲染目标(RenderTarget)是你可以在运行时写入的纹理。在引擎方面,它们存储基础颜色、法线和环境光遮蔽等信息。在用户方面,渲染目标主要用作一种辅助相机。你可以将场景捕捉指向某物并将图像存储到...
- 比呀比: Fossil 化石 Canvas NS 男士复古帆布斜挎包 $57.59
-
FossilCanvasNS男士复古帆布斜挎包,尺寸约为26.5*11*33厘米。采用100%纯棉帆布面料,融合了休闲与百搭的外形,在经典的款型呈现复古质感。内设1个拉链袋,2个搭扣数码产品袋和...
- 比呀比: Timberland 添柏岚 Canvas Cord Case 帆布旅行手包 $5.99
-
Timberland添柏岚这款耐用帆布旅行手包,虽然一眼过去,觉得不咋地,但是品牌和质量还是妥妥滴,非常适合装一些零零碎碎的小东西,便于携带,多色可选,重点是价格更是感动价啊。目前这款包在6pm报价...
- 提炼文章/知识资料,两键转换成小红书图片
-
现在AI的功能已经越来越强大了,通过AI可以提高我们不少工作效率。刚好前几天做了一个几乎“一气呵成”,把长文章转成小红书卡片的流程Demo,分享给大家。之前发过两篇利用AI把长文章转成小红书图片...
- python海龟绘图turtle(一):画布和窗体
-
海龟绘图(turtle)是python的一个有趣的内置模块,是python语言的标准库之一,是入门级的图形绘制函数库。海龟绘图(turtle)可以根据编写的控制指令(代码),让一个小“海龟”在屏幕上来...
- 在文档中添加画布及图片(word中如何添加画布)
-
【分享成果,随喜正能量】宁可正而不足,不可邪而有余。相识满天下,知心能几人。书七成,戏三分,牛皮灯影胡编成。布施不如还债,修福不如避祸。勿以恶小而为之,勿以善小而不为。。《VBA之Word应用》,是我...
- 知识管理神器 Obsidian,终于有了白板功能!
-
沙牛提示阅读本文需要3分钟,Obsidian白板功能来了!如果你喜欢本文,就分享给你的小伙伴!01白板继双链笔记之后,这一年,白板类工具开始火了起来。顾名思义,白板类工具,它给了你一张无限尺寸...
- 虚拟背景第一弹!教你如何在家中优雅地“学在交大”!
-
交大将于3月2日正式开始线上教学(3月1日举行线上教学第一课|视频直播课)目前正处于网课试课阶段交大在线课程教学以ZOOM、Canvas等作为主平台平台的虚拟背景功能可以具特别的环境效果更好地沉浸课堂...
- 一周热门
- 最近发表
-
- Luminati代理动态IP教程指南配置代理VMLogin中文版反指纹浏览器
- 文档中图形及子图形的处理(word中的图形对象有何特点)
- Python爬虫破解滑动验证码教程(python绕过滑动验证码)
- 「教程」5 分钟带你入门 kivy(新手kp教学)
- 比呀比: Fossil Estate Canvas EW 男式复古邮差包 $70.99
- 智能教学:如何在网上授课(网上授课怎么弄)
- wxPython库教程系列之图片:托盘图标和图片缩放、移动
- UE4渲染目标开发教程(ue4渲染效果图质量怎么样)
- 比呀比: Fossil 化石 Canvas NS 男士复古帆布斜挎包 $57.59
- 比呀比: Timberland 添柏岚 Canvas Cord Case 帆布旅行手包 $5.99
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 选择器 (30)
- CSS 轮廓 (30)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 中级教程 (30)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)