从 ByteString 识别光栅(jpg、png 等)或 svg 文件格式

rPu*_*lvi 3 c# wpf svg

在 C# (.NET FW 4.5) 中,有没有办法了解字节串是否包含 .svg 文件或任何光栅文件?我使用这个程序:

[...]
byte[] img = System.Convert.FromBase64String(res);
ctrlImage = new BitmapImage();
ctrlImage.BeginInit();
MemoryStream ms = new MemoryStream(img);                                        
ctrlImage.StreamSource = ms;
ctrlImage.EndInit();
Run Code Online (Sandbox Code Playgroud)

将流转换为BitmpatImage,但现在我需要验证是否res包含 svg 文件而不是光栅文件。

谢谢你。

Cle*_*ens 5

SVG 文件格式基于 XML。因此,您可以尝试从图像缓冲区解码文本字符串并检查它是否以<?xml或开头<svg:

bool isSvg = false;

try
{
    var text = Encoding.UTF8.GetString(img);
    isSvg = text.StartsWith("<?xml ") || text.StartsWith("<svg ");
}
catch
{
}
Run Code Online (Sandbox Code Playgroud)

或者您可能只是检查缓冲区中的第一个字节是否为 a <,因为光栅图像格式不以该字符开头:

bool isSvg = img[0] == '<';
Run Code Online (Sandbox Code Playgroud)