有二进制SVG吗?

use*_*993 10 graphics svg intermediate-language

在我看来,在为动态数据可视化编写代码时,我最终会在不同的语言/平台上反复做同样的事情.现在,如果我有一个跨平台语言(我做)和类似SVG的二进制版本,我可以使我的代码目标,并使用/创建解释器用于我目前需要使用它的任何平台.

我不想要SVG的原因是因为明文部分对我来说太慢了.我当然可以创建我自己的中间格式,但是如果已经有各种各样的东西实现的东西那么对我来说工作就越少!

And*_*ent 6

来自评论:

除了通过网络发送 SVG 的传输成本之外,SVG 的性能几乎与它是明文无关

不,那是完全错误的。我在 CSIRO 工作,使用 XML 构建大型 3D 模型。澳大利亚地球科学公司对解析速度进行了正式研究 - 与读取 4 或 8 字节二进制表示相比,从文本中解析浮点数对于大数据集来说相对昂贵。

我花了很多时间优化 Touchgram 的内部二进制格式,现在正在研究矢量艺术。

您可以使用的技术之一是组合

  1. 变长整数编​​码和
  2. 将点标准化为整数表示的比例,然后将路径存储为增量序列

这可能会产生每步通常仅使用 1 或 2 个字节的路径,而不是典型的 12 个字节。

考虑一条基本线 <polyline class="Connect" points="100,200 100,100" />

我可以用 4 个字节而不是 53 个字节来表示。

到目前为止,我在二进制 SVG 中找到的只是这篇关于链接到项目描述存储库的Go 项目的文章

2023 年更新

我发现Rive 对其文件格式的讨论,其中讨论了使用类似的可变长度整数方法。

  • 并不是每个人都专注于用于 Web 渲染的二进制 SVG!我关于解析的观点仍然成立 - 传输压缩只会增加更多的解码时间来解包,然后你必须解析明文。这适用于基于 XML 或 JSON 的格式。 (2认同)

Tig*_*igt 5

根据您所说的“太慢”的含义,答案会有所不同:

文件过大

正式地说,SVG 与二进制格式最接近的东西是 SVGZ,它是一个带有.svgz扩展名的 gzip SVG 文件。所有符合标准的 SVG 查看器都应该能够打开它。在 *nix 系统上制作一个很简单:

gzip yourfile.svg && mv yourfile.svg.gz yourfile.svgz
Run Code Online (Sandbox Code Playgroud)

您也可以尝试Brotli 压缩,它往往具有较小的文件大小,但需要更多的压缩时间。

包括其他资产是低效的

SVG 只能通过base64 编码捆绑位图和其他二进制数据,这具有相当大的开销。

PDF 可以包含原始二进制数据的“流”,并且在以编程方式生成时非常高效。

解析文本数据耗时太长

这很棘手。PDF 及其兄弟Encapsulated PostScript也是旧的、支持良好的矢量图形格式。不幸的是,它们的核心也是文本,具有可选的压缩功能。

你可以试试Computer Graphics Metafiles,它可以提前编译。但我不确定它们在消费设备上的支持程度如何。