Действительно ли файл является изображением?

Вам не хватает «корневой» конфигурации / опций (я не знаю, так как я не использую Hanami).

Как я это нашел?

Глядя на трассировку стека:

(все ссылки на последние, потому что я ленивый :))

11
задан user 5 September 2012 в 09:55
поделиться

8 ответов

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

Расширения файла технически не содержат важных данных об изображении. Это просто помогает фигуре ОС что программу использовать для открытия его. (Но, проверение extn является, вероятно, самым легким путем, и обычно исправляйте.)

10
ответ дан 3 December 2019 в 02:41
поделиться

Это не тестируется, но это - что-то вроде этого:

private string MimeType (string Filename)
{
    string mime = "[default]";
    string ext = GetExtension(Filename).ToLower();
    Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext);
    if (rk != null && rk.GetValue("Content Type") != null)
        mime = rk.GetValue("Content Type").ToString();
    return mime;
}

(Извините, это было некоторое время, так как я сделал материал реестра),

7
ответ дан 3 December 2019 в 02:41
поделиться

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

bool isImage;
try
{
  Bitmap.FromFile(filePath);
  isImage = true;
}
catch
{
  isImage = false;
}
5
ответ дан 3 December 2019 в 02:41
поделиться

Я не думаю, что существует любой способ гарантировать, что данный файл (или любой набор байтов) обязательно представляет изображение кроме попытки загрузить и отобразить его.

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

// Some signatures:

const string _pdfSignature = "%PDF-";
readonly byte[] _bmpSignature = new byte[2] { 0x42, 0x4D };
readonly byte[] _pngSignature = new byte[8] {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A};
readonly byte[] _gifSignature = new byte[6] { 0x47, 0x49, 0x46, 0x38, 0x39, 0x61 };

И для JPGs:

Assert.That(_theBytes[0] == 0xFF && _theBytes[1] == 0xD8);    //Start of jpg file
Assert.That(_theBytes[_theBytes.Length - 2] == 0xFF && _theBytes[_theBytes.Length - 1] == 0xD9); //End of jpg file
4
ответ дан 3 December 2019 в 02:41
поделиться

проверьте расширение файла

1
ответ дан 3 December 2019 в 02:41
поделиться

Если необходимо проверить это, файл является допустимым форматом изображения затем, Вы оказываетесь перед необходимостью иметь своего рода код, пытаются проанализировать содержание согласно типу файла, который Вы ожидаете. Чтобы сделать это, Вы назвали бы статический метод FromFile на классе Изображения, чтобы попытаться получить экземпляр Изображения.

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

Если Вам не нужна проверка, хотя, проверяя расширение файла или имитируют тип, очень хорошо.

2
ответ дан 3 December 2019 в 02:41
поделиться

Большинство файлов изображений имеет волшебный байт или два в самом начале файла. Это используется декодерами и программами просмотра изображений для идентификации типа файла. Нет никакого правила, которое может помочь Вам.

2
ответ дан 3 December 2019 в 02:41
поделиться

По общему признанию я не сделал слишком много с этим, но это просто не ищет тип пантомимы?

http://www.iana.org/assignments/media-types/

0
ответ дан 3 December 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: