Надежно проверить, что файл действителен JPG - PullRequest
0 голосов
/ 22 сентября 2018

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

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

Какие дополнительные проверки байтов можно выполнить для проверки действительности JPEGфайл (маркеры, которые будут существовать в КАЖДОМ jpeg).

1 Ответ

0 голосов
/ 22 сентября 2018

Ответ зависит от уровня проверки, которую вы хотите сделать.Каждый поток JPEG должен иметь маркер SOI в начале и маркер EOI в конце.Теоретически после рынка EOI могут быть данные, которые находятся за пределами изображения JPEG.

На следующем уровне ниже вы можете проверить, есть ли маркер SOFx.Должен быть только один.

Тогда вы можете убедиться, что достаточно маркеров SOS.В последовательном JPEG должно быть включено для каждого компонента.Для прогрессивного JPEG вам нужно сделать немного больше проверки.

Затем вы можете проверить наличие всех маркеров DHT и DQT, требуемых маркерами SOS.

Наконец, вы можетепроверьте данные сканирования, которые требуют распаковки изображения.

...