两全其美:使用 SVG 和 HTML Canvas

已发表: 2022-12-29

众所周知,SVG 非常适合分辨率独立性,并且可以缩放到任何尺寸而不会降低质量。 但是,SVG 的缺点之一是,如果您习惯于使用HTML 画布,它们可能很难使用。 在本文中,我们将探讨如何使 SVG 与 HTML 画布完美搭配,以便您可以充分利用两者的优势。

在本文中,我们将学习如何使用内联SVG 图像。 要将 SVG 图像直接写入 HTML 文档,请使用 *svg 标签。 使用 VS 代码或首选 IDE,打开 SVG 图像,复制代码并将其粘贴到 HTML 元素“body”中。

内联 SVG。 在 SVG 标签中,包含一个与 title> 标签相对应的 aria-bylabel 属性。 对于不止一种类型的形状,为每个形状组添加一个标题标签可以让创作更加愉快。 在同一篇文章中包含描述和标题标签对辅助技术的用户非常有益。

一行 SVG 比不属于文件系统的嵌入式文件要好得多。 此外,由于可以像对待文档中的任何其他元素一样对待 SVG,因此CSS 交互要简单得多。 这在与悬停效果交互时尤为重要。

内联 SVG 是一种包含在网页标记中的标记。

您如何比较 Html Canvas 和 Svg?

您如何比较 Html Canvas 和 Svg?
图片拍摄:https://blogspot.com

图形是使用 HTML 元素使用 JavaScript 绘制的。 图形元素被定义为画布元素。 当对象较少或表面积较大时,最好使用 SVG。 当涉及对象数量较少的表面或涉及较大表面上的对象时,Canvas 具有更高的性能。

Canvas 和 SVG 都是允许创建图形、图像和形状的 HTML5 技术。 因为 Canvas 被认为是一个容器,所以没有 JavaScript 就无法在 Canvas 中创建任何绘图。 我们在上面的代码片段中使用 getElementById() 创建了一个画布元素,然后再次使用 getElementById() 在画布上绘制了一个矩形。

矢量格式的图形由 SVG 标准表示,而光栅格式的图形由 Canvas 标准表示。 Canvas 和 SVG 都是由形状和像素组成的。 无法使用 SVG 读取图形对象,SVG 是一种易于理解的语言。 Canvas 应用程序易于使用且易于理解。 当您将 SVG 用于更大的表面或更少的对象时,它更容易使用。 当与小表面或大量对象一起使用时,Canvas 表现更好。 无法读取图形对象,因为很难理解 SVG 语法。 Canvas 语法简单易懂。

Svg 比。 帆布

如果您更喜欢静态矢量演示,sva 是您的最佳选择。 画布模式在 HTML5 中启用。

你能在 Canvas 中渲染 Svg 吗?

你能在 Canvas 中渲染 Svg 吗?
图片拍摄:https://imgur.com

是的,可以在画布中渲染 SVG。 这可以通过使用诸如 canvg 之类的库来完成。

这个库允许您使用纯 JavaScript 将任意 DOM 节点转换为矢量 (SVG) 或光栅(PNG 或 JPEG)图像,是我使用的库之一。 当 DOM 元素导出为 SVG 时,您可以更改 DOM 元素的大小以匹配您想要的大小,例如 3500x,这比按钮的原始大小大得多。 在本教程中,我们将演示如何使用 JavaScript 将 .svg 文件或 .string 渲染为图像。 为了检索纯数据,我们需要数据 URL。 您可以使用创建的 SVG 数据 URL 作为 HTML 中图像元素的来源来测试其有效性。 选择空白画布后,您可以使用它来渲染具有自定义大小的 SVG,然后将其导出为 PNG 或 JPEG。 在此示例中,我们将使用Wikipedia Tiger SVG作为起点,然后通过将 SVG 存储在字符串变量中来手动生成它,然后再使用数据 URL 方案来定义编码的 URL。

Canvas 是否生成矢量图形?

画布具有更大的表面积或更多的对象以提供更好的性能。 在基于矢量的格式中,SVG 的形状被矢量化。 Canvas 是一种基于光栅的图形格式,采用像素单位。

为什么使用 Svg 而不是光栅图形?

出于各种原因,您可能需要考虑在设计中使用 SVG 而不是光栅图形。 可以在不丢失细节的情况下将矢量图像缩放到任意大小,使其成为网站和印刷品的理想选择。 此外,它们可以使用任何矢量编辑程序进行编辑,使它们成为设计徽标、图标和其他图形的绝佳选择。


Svg 应该内联吗?

因为内联 SVG 嵌入在 HTML 中,不需要另一个网络请求来检索 SVG 文件,因此加载速度会更快。 重要的是要了解,虽然您将收到 FOUC(无样式内容的 Flash),但您的内联 SVG 也会引用外部字体。

因为 HTML 允许您嵌入图形,所以您可以使用多种方法来嵌入它们。 嵌入图像时,不会为包含它们的每个后续文档加载它们。 HTML 文档的样式表可用于增加或减少图形的外观。 例如,可以定义填充和线条颜色以及线条强度和变换。 与嵌入的外部文件相比,内部 SVG 文件具有许多优点。 例如,如果将 SVG 放在链接中并使用 CSS,则可以创建悬停效果。 因为 HTML 文档的 DOM 节点树包含集成的 SVG,所以也可以使用 CSS 访问单个元素。 JavaScript 允许您毫无困难地执行相同的操作。

画布到 Svg

Canvas 是基于像素的绘图表面,其中每个像素都可以设置为特定颜色。 Svg 是一种基于矢量的图像格式,其中每个元素都由一组坐标定义。

Scalable Vector Graphics (SVG) 程序是 Scalable Vector Graphics 的首字母缩写词。 Canvas 元素是一种 HTML 元素,用于在网页上生成图形。 让我们仔细看看这两种流行选择之间的区别。 还详细讨论了信息图表和比较表之间的差异。

可缩放矢量图形的优点

svg 文件中的图像可以在不损失其图像质量的情况下进行缩放。 另一方面,画布上的图像是位图,这意味着它由像素组成,并且可以随着图像按比例缩小而变形。

Canvas.todataurl Svg

Canvas.todataurl svg是一个函数,可用于将画布元素转换为 svg 文件。 如果您想将 canvas 元素的内容保存为图像或想要创建矢量图像,这会很有用。

在本文中,我们将学习如何将 SVG 绘制到画布,然后使用 JavaScript 下载它。 为了确定 SVG 的宽度和高度,我们可以使用这种方法。 使用此方法将返回具有 left、top、width 和 height 值的对象。 这是 ansvg 元素的边界框。 加载图像后,我们可以绘制画布。 在这种情况下,我们将使用 DataURL 来转换画布。 我们必须将 base64 字符串从 dataURL 传递到 dataURL,以便显示我们的两个图像。

此外,图像的质量可以使用 jpeg 和 webp 图像来决定。 要创建 zip,我们可以使用 JSZip 库。 如果您发现任何错误,请告诉我。

如何在 Canvas 中使用 Svg

Canvas 是一种功能强大的绘图界面,可让您为网站创建图形和图像。 Canvas 和流行的矢量图像格式 SVG可以结合使用以创建令人惊叹的视觉效果。 第一步是使用“外部对象”元素的 HTML 元素将 SVG 绘制到画布上。 然后必须将 SVG 图像绘制到画布中。 此外,除了 foreignObject> 元素之外,还有一个 rect> 元素可用于绘制直线、圆、矩形和路径对象。 在foreign Object>元素中,有一个image元素,可以用来绘制图像。 Coordinates”元素也可以用来表示图像中心的坐标。 异物元素除了异物元素外,还有一个type元素可以用来指定图片类型。 除了 foreignobject> 元素之外,还有两个元素:宽度和高度元素,可用于指定图像的高度和宽度。 还需要诸如此类的对象元素才能将图像绘制到绘图表面上。 type 参数定义了一个带有 toDataURL> 方法的外部对象元素,该方法返回一个数据 URL,其中包含指定格式的图像表示。 您可以指定所需的文件格式和图像质量。 如果未指定特定文件格式或未提供支持,则数据将导出为图像或 PNG。 该元素的外部 Object' 和 toDataURL' 方法使生成包含您生成的图像的数据 URL 变得简单。