一点背景来设置场景:我们已经告诉客户他可以向我们提供任何类型的图像,我们会把它们放在他的报告中。我刚刚快速浏览了一下,发现报告(以及我和它们之间的其他事情)都设计为仅使用 SVG。
当我在网上发现您可以使用免费工具将图像从 jpg 或 PNG 转换为 SVG 时,我以为我已经赚到了金子,但唉,我还没有成功地将 SVG 作为字节存储在数据库中,其格式允许我在读回后再次使用它。
以下是导致我的问题的快速时间表。
- 我使用在线工具从PNG生成SVG(例如MobileFish)
- 我可以在火狐中打开并查看它,看起来还可以
- 我最终需要将 SVG 作为字节存储在数据库中,报告将通过将其作为 SVG 提供的网页从该网页中提取。因此,我将其作为字节写入SQL数据脚本。下面包含我用于编写这些字节的代码。
- 我访问了该网页,并收到一个错误,指出"第 1 行第 1 列出现 XML 解析错误",它显示了我的一些字节。他们开始"3C73" 我
- 重新访问数据库,并将我刚刚在那里编写的字节与一些预先存在的(和工作字节)进行比较。当我的新开始"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));
}
}
任何帮助表示赞赏。
干杯
两件事:
-
SVG 是矢量图像,而不是位图文件。 在线工具所做的只是获取 JPEG 并创建一个嵌入 JPEG 的 SVG 文件。 您并没有真正获得真正的 SVG 图像的好处。 如果你意识到并理解这一点,那就不用担心了。
-
SVG 文件只是文本。 从理论上讲,您没有理由不能将它们作为字符串存储在数据库中。 只要柱子足够大。 但是,通常,如果要将非结构化文件存储在数据库中,则首选使用的列类型是"Blob"。
http://technet.microsoft.com/en-us/library/bb895234.aspx
将 SVG 文件转换为十六进制只会使速度变慢并使文件大小加倍。 此外,当您转换回来时,您必须非常小心您使用的字符串编码。 事实上,这听起来像是你遇到的问题。
我怀疑你做错了。SVG是简单且基于XML的矢量图像格式。我猜您的应用程序可能正在使用 SVG 图像元素,您需要将 png 图像转换为 base64 编码字符串。