百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

前端如何绘制svg格式图片?

zhezhongyun 2025-01-08 18:41 54 浏览

我们经常在一些页面中遇见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 格式保存结果图像。最适合图像密集型的游戏,其中的许多对象会被频繁重绘

相关推荐

字体缩放(方式一)(字体缩放150%怎么做)

通过元素宽度和字数计算得到缩放简单实现如下:/***字体最大为视觉要求大小(maxFontSize);超出缩小字体显示,最小为minFontSize;最小字体时超出部分使用圆点(...);*p...

网页世界隐藏的神秘代码语言,竟能这样改变布局

CSS基础:选择器与属性CSS(CascadingStyleSheets)是用于控制网页外观的一门样式表语言。它通过定义HTML元素的显示方式来增强网页的表现力。CSS的选择器允许开发者精确地定位...

CSS属性值计算过程详解(css属性用来定义元素计算)

在CSS中,即使某些属性没有显式声明,浏览器也会通过**属性值计算过程**为每个元素的所有属性赋予最终值。这一过程分为四个关键步骤,以下将逐一解析。1.确定声明值浏览器首先检查所有**直接应用**到...

软网推荐:找回调整Windows 10字号功能

之前的系统,从WindowsXP到早期版本的Windows10,均有字体大小调整功能,但从创意者版Windows10以来,取消了之前的设置选项,取而代之的是自定义缩放比例设置。使用这个功能调整过...

Excel中如何设置文本框属性,实例代码讲解

Excel不仅可以对数据进行处理,而且也可以图形化数据,直观显示数据表达的内容。本节介绍一个很重要的对象,Characters,字符对象,使用Characters对象可修改包含在全文本字符串中的任...

CSS 字体样式(css中字体)

本节我们来讲字体样式,之前我们学习HTML的时候学过一些用于字体加粗、倾斜的标签,但是使用标签来实现的效果肯定没有我们通过CSS中的样式来的方便。接下来我们会给大家介绍下面这几个属性的使用:通...

PC网站建设必备代码知识:HTML基础与应用技巧

在PC网站建设的相关课程里,代码扮演着至关重要的角色。只有熟练运用正确的代码,我们才能打造出功能完善、用户体验出色的PC网站。接下来,我会详细讲解在PC网站建设环节中必须了解的代码知识。HTML基础代...

让你大跌眼镜的疯狂 HTML 和 CSS 技巧

今天,分享一个让你大开眼界的技巧。通过使用这个技巧,你可以将整个网页变成一个CSS编辑器。没错,你从未见过这种方法。当我第一次尝试时,我完全被震惊到了。现在,让我们开始吧!步骤1首先,创建一个基础的...

jQuery EasyUI使用教程:创建一个链接按钮

jQueryEasyUI最新版下载>本教程主要为大家展示如何使用jQueryEasyUI创建一个链接按钮。通常情况下,使用“button/”元素来创建一个按钮;使用“a/”元素来创建链接按钮...

React 19 有哪些新特性?(react100)

如果你对React18还不熟悉,欢迎阅读之前的文章《React18全览[1]》最近React发布了V19RC版本,按照惯例,我们对React19的新特性进行一次深度的体验学习...

Java注解探秘:为什么@PostConstruct能解决你的初始化难题?

你是否在Spring项目中遇到过这样的困扰:明明依赖注入已经完成,但某些配置就是无法正常加载?手动调用初始化方法又容易引发空指针异常?这就是@PostConstruct注解大显身手的时候了!@Post...

AI驱动的表单自动填写(ai置入表格)

我们都同意,填写表格是一项枯燥且耗时的任务。如果我们可以创建一个可以为我们填写表格的AI助手,让我们将时间投入到更有建设性的任务中,那会怎样?AI助手将能够通过调用以表单字段为参数的函数来填写表...

从零到一:小程序设计新手如何快速上手?

开发环境搭建对于小程序设计新手而言,搭建合适的开发环境是首要任务。以小程序为例,其官方提供了功能强大的开发工具——开发者工具。首先,新手需前往官方开发者平台,在页面中找到“工具下载”板块,根据...

JavaSwingGUI从小白到大神-6(续)(java从小白到大牛怎么样)

接上一篇《JavaSwingGUI从小白到大神-6》,因本篇文章3万多字,头条一篇发不完,只能分开发。同事查询面板:CompanyFind.javapublicclassCompanyFind{...

C# winform界面假死(c#程序假死)

针对C#WinForm界面假死问题,以下是分步解决方案:1.使用异步编程(async/await)将耗时操作移至后台线程,保持UI线程响应。步骤:将事件处理函数标记为async。使用Task....