将 SVG 作为字节存储在数据库中



一点背景来设置场景:我们已经告诉客户他可以向我们提供任何类型的图像,我们会把它们放在他的报告中。我刚刚快速浏览了一下,发现报告(以及我和它们之间的其他事情)都设计为仅使用 SVG。

当我在网上发现您可以使用免费工具将图像从 jpg 或 PNG 转换为 SVG 时,我以为我已经赚到了金子,但唉,我还没有成功地将 SVG 作为字节存储在数据库中,其格式允许我在读回后再次使用它。

以下是导致我的问题的快速时间表。

  1. 我使用在线工具从PNG生成SVG(例如MobileFish)
  2. 我可以在火狐中打开并查看它,看起来还可以
  3. 我最终需要将 SVG 作为字节存储在数据库中,报告将通过将其作为 SVG 提供的网页从该网页中提取。因此,我将其作为字节写入SQL数据脚本。下面包含我用于编写这些字节的代码。
  4. 我访问了该网页,并收到一个错误,指出"第 1 行第 1 列出现 XML 解析错误",它显示了我的一些字节。他们开始"3C73"
  5. 重新访问数据库,并将我刚刚在那里编写的字节与一些预先存在的(和工作字节)进行比较。当我的新开始"3C73"时,其他的开始"0xFFFE"。

我想我可能只是指出了一些非常基本的东西,但它没有点击。

有人可以告诉我我做了什么,这意味着我的字节没有以正确的编码/格式存储吗?

当我在记事本++中打开我的新SVG时,我可以看到内容包括以下内容,这些内容可能是相关的:

<image width="900" height="401" xLink:href="data:image/png;base64,

(600+ 行遵循 Base 64 编码数据)

以下是将我的SVG转换为要存储在DB中的字节的代码的大脑:

var bytes = File.ReadAllBytes(file);
using (var fs = new StreamWriter(file + ".txt"))
{
    foreach (var item in bytes)
    {
        fs.Write(String.Format("{0:X2}",item));
    }
}

任何帮助表示赞赏。

干杯

两件事:

  1. SVG 是矢量图像,而不是位图文件。 在线工具所做的只是获取 JPEG 并创建一个嵌入 JPEG 的 SVG 文件。 您并没有真正获得真正的 SVG 图像的好处。 如果你意识到并理解这一点,那就不用担心了。

  2. SVG 文件只是文本。 从理论上讲,您没有理由不能将它们作为字符串存储在数据库中。 只要柱子足够大。 但是,通常,如果要将非结构化文件存储在数据库中,则首选使用的列类型是"Blob"。

http://technet.microsoft.com/en-us/library/bb895234.aspx

将 SVG 文件转换为十六进制只会使速度变慢并使文件大小加倍。 此外,当您转换回来时,您必须非常小心您使用的字符串编码。 事实上,这听起来像是你遇到的问题。

我怀疑你做错了。SVG是简单且基于XML的矢量图像格式。我猜您的应用程序可能正在使用 SVG 图像元素,您需要将 png 图像转换为 base64 编码字符串。

相关内容

  • 没有找到相关文章

最新更新