首页 > 其他分享 >HOW - 图形格式SVG及其应用

HOW - 图形格式SVG及其应用

时间:2024-03-30 13:30:46浏览次数:27  
标签:元素 SVG JavaScript HOW 图像 内联 格式 图形

目录

一、介绍:scalable vector graphic

SVG 是可缩放矢量图形(Scalable Vector Graphics)的缩写。它是一种用于描述二维矢量图形的 XML 格式的标记语言。与像素图形(如 JPEG、PNG 等)不同,像素图形是基于像素的位图,SVG 使用的是基于几何形状的描述,因此它可以无限放大而不失真,适用于各种尺寸的显示设备,从小到移动设备的屏幕到大到高分辨率的显示器,甚至打印品质的输出。

SVG 具有以下特点:

  1. 可缩放性:SVG 图像可以无限缩放而不会失真,因为它们是基于数学描述的矢量图形。具体而言,SVG 图像是由几何形状(如直线、圆、曲线等)和其属性(如颜色、填充等)的数学描述组成的。这些描述不依赖于特定的分辨率或像素密度,而是以数学公式的形式保存。另外,SVG 中的图形元素是相对位置和比例保持一致的,无论图像的尺寸如何变化,图形元素之间的相对位置和比例都保持不变,因此在放大时不会出现失真。

  2. 文本可搜索和编辑:SVG 内的文本和图形元素是可编辑和可搜索的,这使得 SVG 图像非常适合用于包含文本和图形的图表地图等。

  3. 支持互动性和动画:SVG 支持添加交互式元素和动画效果,可以通过 CSS 或 JavaScript 进行控制。

  4. 跨浏览器兼容性:现代 Web 浏览器(如 Chrome、Firefox、Safari 等)都支持 SVG,使得 SVG 成为 Web 开发中常用的图形格式之一。

  5. 可压缩性和无损压缩:SVG 图像可以通过压缩算法进行压缩,以减小文件大小,从而加快加载速度。而且由于 SVG 使用文本文件格式(XML)来存储图形信息,它可以通过无损压缩算法(如 gzip)进行压缩。这意味着即使文件大小很小,也可以保留所有的细节和精度。

SVG 被广泛用于 Web 开发数据可视化图表绘制图标设计等领域,因为它提供了一种灵活、清晰且可交互的图形表示方式。

二、基本使用

  1. 直接在 HTML 中嵌入 SVG 代码:

将 SVG 代码直接放入 HTML 文件中,这样可以轻松地对 SVG 元素应用 CSS 样式和 JavaScript 交互。

<!DOCTYPE html>
<html>
<head>
<style>
svg {
     
  width: 100px;
  height: 100px;
}
circle {
     
  fill: green;
}
</style>
</head>
<body>
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
      <circle cx="50" cy="50" r="40" />
    </svg>
</body>
</html>

效果如下
请添加图片描述

  1. 使用 <img> 标签

将 SVG 文件作为图像文件引用。这种方法的优点是可以像使用其他图像格式一样使用 SVG,简单医用。

然而,这种方法也有一些限制:

2.1 无法直接操作 SVG 内部元素:由于 SVG 被视为一种静态图像,因此无法直接通过 DOM 或 JavaScript 来操作 SVG 内部的元素。假设 SVG 文件包含一个圆形元素,你想要通过 JavaScript 动态地改变它的颜色。如果将 SVG 文件作为图像引用,你无法直接访问 SVG 元素来修改其属性,例如 document.querySelector('circle').setAttribute('fill', 'blue')

2.2 不支持内联样式和脚本:在以 <img> 标签引入 SVG 文件时,SVG 图像不支持内联样式和脚本,这意味着无法通过 HTML 的 style 属性或者 SVG 内部的 <style> 元素来应用样式,也无法使用内联的 JavaScript 代码。假设 SVG 文件包含一个带有内联样式的矩形元素,并且带有一些 JavaScript 脚本来处理交互行为,示例如下:

<!-- SVG 文件内容(rectangle.svg) -->
<svg width="100" height="100">
  <rect x="10" y="10" width="80" height="80" fill="blue" onclick="alert('Clicked!')" />
</svg>

在这个例子中,尽管 SVG 文件中有一个蓝色的矩形元素,并且带有一个点击事件,但是当它被引用为图像,就无法执行内联的 JavaScript,因此点击事件无法触发。

  1. 使用 CSS background-image

<img> 标签用法限制一致。

<!DOCTYPE html>
<html>
<head>
<style>
  .icon {
     
    width: 100px;
    height: 100px;
    background-image: url('https://example.com/path/to/svg/image.svg');
    background-size: cover;
  }
</style>
</head>
<body>
    <div class="icon"></div>
</body>
</html>
  1. 使用 <object><embed> 标签:

这两个标签都允许将外部 SVG 文件嵌入到 HTML 文档中。使用这些方法,可以在一定程度上访问和操作 SVG 文档的 DOM,并且支持内联样式和脚本,但它们之间存在一些差异。

<!DOCTYPE html>
<html>
<body>
    <obje

标签:元素,SVG,JavaScript,HOW,图像,内联,格式,图形
From: https://blog.csdn.net/weixin_58540586/article/details/137156983

相关文章

  • SVG XML 格式定义图形入门介绍
    SVGSVGmeansScalableVectorGraphics.SVG使用XML格式定义图形SVG图像在放大或改变尺寸的情况下其图形质量不会有所损失SVG是万维网联盟的标准HelloWorldUseSVGinhtmlandyoucansee:LinktotheSVGfileYoucanuse<a>tagtolinktothes......
  • Json文件格式及Cpp解析
    JSON(JavaScriptObjectNotation)用于存储和传输数据,通常用于服务器-->Web端的数据传输JSON示例:{"employees":[{"firstName":"John","lastName":"Doe"},{"firstName":"Anna","lastN......
  • data分区格式f2fs改为ext4
    问题:设备是不带电池的,关机的时候是直接断电的,如果data分区是f2fs的文件系统格式,这种操作是有一定概率性损坏文件系统了导致开不了机。f2fs改为ext4就可以减小异常掉电后数据丢失的概率。异常开机:  正常开机会有很多init的信息:  措施:data分区改成ext4的格式文件系统:A......
  • ctfshow misc练习
    ctfshowmisc做题记录1.0misc5用记事本打开,发现flag1.1misc6一样思路1.2misc7没区别1.3misc8和之前有了点区别,没在文件里发现flagflag在图片文件中图片文件中。这是提示,我们直接foremost分离获得flag图片1.4misc9继续在文件中直接看见flag1.5misc10我们看......
  • vue2当中使用svg
    1、引入依赖npminstall  svg-sprite-loader-D2、在src文件夹下新建文件夹存放svg图 3、封装公共svg组件 3、全局注册使用(避免使用时还需要再去引入封装的svg组件) 4、在vue.config.js当中增加svg配置 5、使用用例 ......
  • unity 数字格式化
    stringstrNeed=string.Format("{0}{1}",str1,str2); //可以拼接成各种字符串stringstrNeed=string.Format("{0:F2}",2.3634f);//可以使字符串为保留两位小数的浮点数值stringstrNeed=string.Format("{0:D2}",5); //可以使字作串为两位整数的值,不足位数前面补零......
  • Unity String格式化字符串
    1、格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元)string.Format("{0:C}",0.2)结果为:¥0.20(英文操作系统结果:$0.20)默认格式化小数点后面保留两位小数,如果需要保留一位或者更多,可以指定位数string.Format("{0:C1}",23.15)结果为:¥23.2(截取会自动四舍五入)格......
  • Aspose Cells 单元格 格式
    Aspose单元格格式编号///<summary>///单元格样式编号///0GeneralGeneral///1Decimal0///2Decimal0.00///3Decimal#,##0///4Decimal#,##0.00///5Currency$#,##0;$-#,##0///6Currency$#,##0;[Red]$-#,##0///7Currency$#,##0.00;$-#,#......
  • AIGC、3D模型、轻量化、格式转换、可视化、数字孪生引擎...
    老子云3D可视化快速开发平台,集云压缩、云烘焙、云存储云展示于一体,使3D模型资源自动输出至移动端PC端、Web端,能在多设备、全平台进行展示和交互,是全球领先、自主可控的自动化3D云引擎。平台架构平台特性基于HTML5和WebGL技术,可在主流浏览器上进行快速浏览和调试,支持P......
  • 基于svelte webpack开发umd格式的npm包
    原文链接:https://www.cnblogs.com/yalong/p/18101609背景:平常会接触到vue、react、jquery项目,项目中有一些公共组件其实是可以复用的,但是在vue项目中封装好的组件,在react中又不能用;于是想找个方法,实现一次开发,多框架复用,调研发现svelte正好符合这个要求,把组件封装成npm发布......