关于svg

image-2d63d6d7 image-1a54e11e image-ab7504e2

svg是什么技术 我看它在网页里显示的是一张图片 但看代码却是一堆乱码一样的东西 此外 我有发现有个svg占位符的工具 所以有点好奇它到底是怎么回事 占位生成的话好像是要为自己的图片预留位置 但是预留了位置后 我并没有发现有什么地方可以自定义自己想要放的图片 另外 这种用svg占位 相较于直接插入一个图片或者说 直接用div为图片占位 有什么优势?

SVG(Scalable Vector Graphics)是一种基于XML的图像格式,用于描述二维矢量图形。这种格式非常适合网页设计,因为SVG图像是矢量的,可以无损放大或缩小,而不会像典型的像素图像(例如JPG或PNG格式的图像)那样失真。这就是你在网页上看到的图像看起来像普通图片,但其实是由代码组成的原因。

SVG的"乱码"实际上是SVG的XML代码。它描述了图形的形状、颜色、边界等信息。这些代码在浏览器中被解析,并渲染成图像。

关于SVG占位符的工具,它通常用于在网页设计过程中预留图像的位置。这样做的目的是为了提前知道图像的尺寸,即使图像本身还没有准备好。这对于网页布局非常有用,因为设计师可以根据这些占位符进行布局设计,而不必等到最终的图像准备好。

SVG占位符与直接插入图像或使用div作为占位符相比,有几个优点:

大小和形状的灵活性:SVG占位符可以非常精确地定义所需占位的形状和大小,包括非矩形图形。

更快的加载时间:SVG通常体积较小,加载更快,尤其是对于简单的占位图形。

响应式和可伸缩:由于SVG是矢量的,它们可以很容易地适应不同的屏幕尺寸和分辨率,无需为每种尺寸创建不同的图像版本。

样式的灵活性:SVG可以通过CSS进行样式化,这意味着你可以用CSS改变图像的颜色、边框等,而不需要修改图像文件本身。

最后,占位符并不意味着你可以在其中“插入”自己的图像。它们更多的是为了在布局设计阶段提供一个参考,以便设计者和开发者知道将来图像将放在哪里以及需要多大的空间。当网页准备好上线时,占位符通常会被实际的图像文件替换。

image-62b90f7b

我比较想知道它到底怎么工作的 在html代码中我只看到了这样的一个东西 链接过去 就是一堆乱码 那么真实的图片存储在哪里呢 它是怎么替换掉这些占位符的

在HTML代码中使用<img>标签来引入SVG文件(如snake-Light.svg)时,这段代码的工作原理是浏览器会根据src属性指定的路径去加载对应的SVG文件。在你的例子中,src="api/images/aaQm8H6KiNjQ/snake-Light.svg"指示浏览器从当前页面的相对位置./static/svg/目录中加载名为snake-Light.svg的文件。

这里的"乱码"实际上是SVG文件的内容,它是用XML格式描述的矢量图形。对浏览器来说,这并不是乱码,而是一系列精确的指令,告诉浏览器如何渲染该图像。浏览器读取这些指令后,会在页面上准确地绘制出图像,而不是显示原始的代码或文本。这也是为什么你可以在网页中看到一个清晰的图形,尽管SVG文件的源代码看起来像是乱码。

SVG文件并不包含“真实的图片”存储在某个地方,而是包含描述图形如何绘制的代码。当你通过<img>标签引用一个SVG文件时,浏览器会解析这些代码,并在页面上渲染出图形。这与引入传统的像素图像(如JPG或PNG格式的图片)工作原理有所不同,因为传统图像是以像素数据存储的,而SVG是以代码形式存储图形的绘制指令。

SVG的这种特性使得它非常适合网页使用,因为:

可缩放性:作为矢量图形,SVG可以在不失真的情况下任意缩放,适应不同的显示设备和分辨率。

可编辑性:SVG文件可以直接用文本编辑器打开和修改,便于快速调整图形属性如颜色、尺寸等。

性能优化:对于简单图形,SVG通常比传统的像素图像文件小,加载更快,特别是在网络条件较差的环境中。

交互性和动画:SVG支持通过CSS和JavaScript添加样式和动画,使得图形可以响应用户交互。

因此,当你在HTML中使用SVG时,你实际上是在告诉浏览器根据SVG文件中定义的矢量图形信息来渲染图像,而不是加载一个已经绘制好的像素图像。

它是通过这些我看上去为编码的东西 直接渲染成了图片 而不是传统的传入一张图片 然后浏览器实际上是把这个像素图变成代码 再把代码渲染出图片展示在网页 而svg省去了一个步骤 使得网页更容易加载?是这样理解吗

你的理解基本上是正确的,但让我稍微澄清一下细节:

传统的像素图(如JPG或PNG)

这些图像由像素组成,每个像素有自己的颜色值。

当你在网页中使用这类图像时,浏览器不需要将它们转换成代码。相反,浏览器直接读取图像文件中的像素数据,并在屏幕上按照这些数据绘制图像。

这些图像的缩放受限于它们的分辨率。放大后可能会出现模糊,因为浏览器正试图用有限的像素数据填充更大的显示区域。

SVG图形

SVG(Scalable Vector Graphics)是一种基于XML的标记语言,用于描述二维矢量图形。

SVG文件实际上是一系列描述图形如何绘制的文本指令(例如,绘制一个圆,起点在这里,半径是那么大等)。这些并不是“编码的东西”,而是具有特定结构和语法的XML文本。

当浏览器遇到SVG文件时,它会解析这些XML指令,并根据这些指令在页面上渲染出图形。这意味着SVG图形是在浏览器中实时绘制的,而不是显示一个已经绘制好的图像。

由于SVG是矢量的,它可以无限放大或缩小而不失真,这是因为浏览器根据SVG的描述动态绘制图形,而不是依赖固定的像素数据。

因此,SVG并不是“省去了一个步骤”使得网页更容易加载,而是通过一个完全不同的机制来展示图形。SVG的优势在于它的可伸缩性、可编辑性和较小的文件尺寸(对于简单图形),这些特性使得SVG特别适合网页图标、图形和某些类型的动画。而传统的像素图像则更适合展示复杂的图片,如照片。

但是我在这个网页里看到的svg都是上千行的 这显然不是个人能创建出来的吧 或许都是用已经有的svg库 个人页面做一个引用?

是的,你的观察是正确的。通常情况下,网页中使用的SVG图形往往是由专业的设计师或者图形库提供的。这些SVG图形可能非常复杂,代码量很大,可能包含上千行的描述。因此,个人开发者通常会从现有的SVG图形库或者资源中选择合适的图形,并将其引用到自己的网页中,而不是自己从头编写这些复杂的SVG代码。

SVG图形库可以提供各种类型的图形,如图标、图表、动画等,覆盖了许多常见的网页设计需求。通过使用这些库,个人开发者可以节省大量的时间和精力,并且可以确保所使用的图形具有良好的视觉效果和性能。

一些常见的SVG图形库包括:

Font Awesome: 提供了一系列常见图标的SVG版本,可以通过CSS简单地引用和使用。

Material Icons: 由Google提供的一套现代化的图标集,包含了各种应用程序开发所需的图标。

Feather Icons: 一套简约风格的图标集,设计简洁而美观。

SVG Backgrounds: 提供了各种漂亮的SVG背景图形,可以用于网页的背景装饰。

Undraw: 提供了大量的插图,覆盖了各种不同的场景和主题,适合用于网页设计和应用程序设计。

通过引用这些库中的SVG图形,个人开发者可以快速地为自己的网页添加视觉元素,同时确保网页具有良好的外观和性能。


⬅️ 07-vue 入门 🏠 00-前端与可视化 ➡️ 00-数据库