首页 >后端开发 >C++ >如何在完整阅读之前用 C# 验证图像文件?

如何在完整阅读之前用 C# 验证图像文件?

Patricia Arquette
Patricia Arquette原创
2024-12-30 14:35:10666浏览

How Can I Validate an Image File in C# Before Full Reading?

在 C# 中验证文件中的图像

从文件加载图像是编程中的常见任务。然而,确保加载的图像有效可能是一个挑战,特别是在处理不可靠的来源时。本文提出了一种在从文件中完全读取图像之前对其进行验证的解决方案,以防止潜在的错误。

要验证图像,我们可以检查其标头,其中包含有关图像格式和尺寸的信息。不同的图像格式具有不同的标头,通过将标头字节与已知模式进行比较,我们可以确定图像的类型。

以下是 C# 中的示例函数,用于在给定文件路径或流的情况下验证图像:

public static bool IsValidImage(string fileName)
{
    try
    {
        using (var fileStream = File.OpenRead(fileName))
        {
            return IsValidImage(fileStream);
        }
    }
    catch (Exception ex)
    {
        // Handle exceptions here, e.g., FileNotFoundException
        return false;
    }
}

public static bool IsValidImage(Stream imageStream)
{

    // Read the header bytes from the stream
    byte[] headerBytes = new byte[4];
    imageStream.Position = 0;
    imageStream.Read(headerBytes, 0, headerBytes.Length);

    // Compare the header bytes to known patterns
    if (headerBytes.SequenceEqual(Encoding.ASCII.GetBytes("BM")))
    {
        return true; // BMP
    }
    else if (headerBytes.SequenceEqual(Encoding.ASCII.GetBytes("GIF")))
    {
        return true; // GIF
    }
    else if (headerBytes.SequenceEqual(new byte[] { 137, 80, 78, 71 }))
    {
        return true; // PNG
    }
    else if (headerBytes.SequenceEqual(new byte[] { 73, 73, 42 }) || headerBytes.SequenceEqual(new byte[] { 77, 77, 42 }))
    {
        return true; // TIFF
    }
    else if (headerBytes.SequenceEqual(new byte[] { 255, 216, 255, 224 }) || headerBytes.SequenceEqual(new byte[] { 255, 216, 255, 225 }))
    {
        return true; // JPEG
    }
    else
    {
        return false; // Unknown format
    }
}

此代码检查图像的标头字节,并将它们与与各种图像格式相关的已知模式进行比较。如果标头与已知模式匹配,则该函数返回 true。否则,返回 false。

以上是如何在完整阅读之前用 C# 验证图像文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn