1

我不知道我是否在正确的“堆栈”中询问,但目前我似乎是最合适的人。还请注意,如果我错了,我会立即将问题移至另一个堆栈。

我需要保存一个矢量图像(很可能是 SVG 格式)。我们正在考虑如何记住这个图像。关键是我们更喜欢只使用 JSON 文件,这意味着您必须将 SVG 图像至少转换为 Base54,但它是否无损?

另一种方法是将此 SVG 图像的本地路径保存在 JSON 文件的字段中。此图像和 JSON 文件不应通过网络发送,考虑到 PC 环境,从 Bas64 到 SVG 的转换不应太慢。根据您的经验,您建议做什么?

4

2 回答 2

3

您可以使用jq将 .svg 文件的内容编码为 JSON 字符串,例如

jq -Rs . media.svg

当然,您可能希望使用更复杂的 jq 过滤器将 .svg 文件的内容嵌入到 JSON 中。

正如 SVG 是否支持嵌入位图图像的答案所暗示的那样您不需要对 SVG 进行 base64 编码,但如果您确实需要对某些内容进行 base64 编码,则可以使用 jq 的@base64过滤器。您可以通过解码字符串并与原始文件进行比较来验证这是否适用于某些文件(例如 FILENAME)。如果你的 jq 有@based64d,这可以通过以下方式完成:

diff FILENAME <(jq -Rs @base64 FILENAME | jq -r @base64d)
于 2018-06-20T05:20:03.057 回答
3

base64 是一种简单的序列化算法,不涉及任何损失。

但是,SVG 已经是一种序列化 (XML) 字符串格式,以 utf-8 编码。无需使用额外的序列化层,将其存储在 JSON 文件中也没有问题,该文件也是 utf-8 格式(除了需要转义双引号)。如果您不想使用 base64,数据 URL(可能是您的目标,但您没有说)也可以包含纯 XML 数据。像这样:

data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg">...</svg>

(确保 url-excape#%23.)

性能是您需要自己测试的东西。在一个特定的用例中,我决定使用包含 base64 编码字符串的 JSON 文件,因为它实际上是性能最高的解决方案,但这不是您可以依赖的优先级。

于 2018-06-19T15:24:51.497 回答