如何检查字节数组是否为有效图像

本文关键字:是否 数组 有效 图像 字节数 字节 何检查 检查 | 更新日期: 2023-09-27 18:16:45

我知道没有。net函数存在用于检查,但是在我使用字节数组之前,是否有一种算法或简单有效的方法来检查字节是否是有效的图像。我需要这个,因为我正在发送不同的命令到一个服务器谁是不断地听客户端和命令之一是获得服务器的计算机的屏幕截图。

如何检查字节数组是否为有效图像

您可以尝试从字节数组生成图像,如果不是,则检查ArgumentException

public static bool IsValidImage(byte[] bytes)
{
    try {
        using(MemoryStream ms = new MemoryStream(bytes))
           Image.FromStream(ms);
    }
    catch (ArgumentException) {
       return false;
    }
    return true; 
}

如上所述,尝试将其加载到图像中是唯一的万无一失的方法。您可以根据[期望的]图像类型检查magic number,即文件头。例如,*.PNG文件的前8个字节是,十六进制:

0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A

http://en.wikipedia.org/wiki/Portable_Network_Graphics File_header

大多数其他类型的图像文件都有类似的魔术数字。

但是检查它实际上并不能告诉你该文件是否是一个有效的图像文件。在此之后,您所知道的是,这个神奇的数字似乎表明它是一个类型为x的文件。它仍然可能被截断或以其他方式损坏,甚至完全是其他东西,只是碰巧在正确的位置有正确的八位元组序列。

对于JPEG,您可以检查前两个字节是0xFF, 0xD8,最后两个字节是0xFF, 0xD9。当然,图像数据仍然有可能匹配EOI标签,但这种情况应该很少。

根据我的说法,如果你只想要图像输入(适当的图像),那么你应该像这样接受输入字段的属性:

input type="file" name="uploadedFile" id="imageContent" class="required" accept="image/*"/>

这将只给你输入图像。因此,您可以自由地编写后端代码。无需担心图像是否有效

如果你想,甚至可以指定特定的图像类型,比如:

input type="file" name="uploadedFile" id="imageContent" class="required" accept="image/jpeg, image/gif, image/png">