Подтвердить что ты не робот

Как проверить, является ли массив байтов допустимым?

Я знаю, что нет функции .Net, которая существует для проверки, но есть ли алгоритм или простой и эффективный способ проверки, является ли байт допустимым изображением, прежде чем я буду использовать массив байтов. Мне нужно это, потому что я отправляю разные команды на сервер, который постоянно слушает клиента, а одна из команд - получить скриншот серверного компьютера.

4b9b3361

Ответ 1

Вы можете попытаться создать изображение из массива байтов и проверить ArgumentException, если его нет.

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

Ответ 2

Как отмечалось, попытка загрузить его в изображение является единственным отказоустойчивым способом. Вы можете проверить количество букв aka на основе типа [ожидаемого] изображения. Например, первые 8 октетов файла *.PNG в шестнадцатеричном виде:

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

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

Большинство других типов файлов изображений имеют похожие магические числа.

Но проверка этого на самом деле не скажет вам, является ли файл допустимым файлом изображения. Все, что вы узнаете после этого, состоит в том, что число магов, похоже, указывает на то, что это файл типа X. Он все равно может быть усечен или иным образом поврежден или даже быть чем-то другим, что просто имеет правильную последовательность октетов в правильное место.

Ответ 3

Для JPEG вы можете проверить, что первые два байта: 0xFF, 0xD8, а последние два - 0xFF, 0xD9. Конечно, все еще возможно, что данные изображения будут соответствовать тегу EOI, но это должно быть редко.

Ответ 4

По мне, если вы хотите только вход изображения (Правильное изображение), тогда вы должны пойти с атрибутом accept поля ввода следующим образом:

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" >