У меня есть требование, когда я должен определить, не повреждена ли фотография, и, соответственно, отметить ее как таковую.
Вы можете попробовать некоторые вещи, но с определенными форматами файлов (пример: BMP, JPEG в некоторой степени) только человек может в конечном итоге решить, в порядке ли файл или поврежден.Самый простой тест - просто загрузить файл в соответствующий объект (TJpegImage, TPngObject и т. Д.).Если во время загрузки вы получили исключение, вы наверняка получили поврежденный файл.К сожалению, если не возникает исключение, вы не можете сказать, что файл не поврежден.Я видел поврежденные файлы JPEG, которые прекрасно загружаются в Delphi TImage
и могут быть открыты с помощью средства просмотра изображений Windows, но явно повреждены для наблюдателя.С изображениями BMP это еще яснее: открыть растровое изображение, перезаписать несколько байтов в середине файла, а затем открыть его в средстве просмотра.Как любая автоматизированная система может сказать, что эти неправильно окрашенные биты в середине растрового изображения на самом деле неверны?
Еще одна вещь, которая мне нужна, это определить, имеет ли изображение неправильное расширение.Под неправильным расширением я подразумеваю, что иногда я сталкиваюсь с фотографией с расширением jpg, но когда я загружаю эту фотографию в IrfanView, она сообщает, что фотография имеет формат, отличный от расширения.
Как насчет того, чтобы сделать то же самое, пытаясь загрузить файл в объект, соответствующий его расширению, и, если у вас не получится, попробуйте открыть другие форматы?Это должно быть легко.
В качестве альтернативы вы можете исследовать заголовки изображений: большинство форматов файлов начинаются с короткой подписи, несколько байтов.Вы можете просмотреть документацию всех форматов файлов изображений и найти подпись, или вы можете просто открыть большое количество файлов и найти шаблон в первых 4 байтах.Я бы пошел на этот второй вариант, так как поиск надлежащей документации для всех форматов файлов изображений может быть проблемой.