将SVG存储为DB中的字节?

时间:2014-04-08 08:22:12

标签: c# svg base64 byte

有点背景来设置场景:我们告诉客户他可以向我们提供任何类型的图像,我们会将它们放在他的报告中。我刚刚快速完成了这项工作,发现报告(以及我和他们之间的其他事情)都只是为了使用SVG。

当我在网上发现你可以使用免费工具将图像从jpg或PNG转换为SVG时,我认为我已经打动了金牌但是我还没有成功地将SVG存储为DB中的字节一种格式,允许我在阅读后再次使用它。

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

  1. 我使用在线工具从PNG(例如,MobileFish)生成SVG
  2. 我可以在Firefox中打开并查看它,看起来不错
  3. 我最终需要将SVG作为字节存储在数据库中,报告将通过网页将其作为SVG提供。所以我把它作为字节写入SQL数据脚本。我用来写这些字节的代码包含在下面。
  4. 我访问了所说的网页,我得到一个错误,即第1行第1列上有“XML解析错误”,它显示了我的一些字节。他们开始“3C73”
  5. 我重新访问数据库,并将我刚刚编写的字节与一些预先存在的(和工作的)进行比较。当我的新人开始“3C73”时,其他人开始“0xFFFE”。
  6. 我想我可能只是指出了一些非常基本但没有点击过的东西。

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

    当我在Notepad ++中打开我的新SVG时,我可以看到内容包括以下可能相关的内容:

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

    (基础64编码数据跟随600多行)

    以下是将我的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));
        }
    }
    

    任何帮助表示感谢。

    干杯

2 个答案:

答案 0 :(得分:2)

两件事:

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

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

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

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

答案 1 :(得分:1)

我怀疑你做错了。 SVG是简单的XML based vector图像格式。我猜您的应用程序可能正在使用SVG image element,您需要将您的png图像转换为base64编码的字符串。