Как проверить целостность изображения? - PullRequest
2 голосов
/ 24 марта 2011

Я создаю веб-сканер, и одной из его функций является загрузка изображений.

Проблема в том, что иногда, по какой-то причине, есть изображения, которые загружаются с ошибками, например: половина изображения - просто серая или белая, как будто она перестала загружаться в какой-то момент, а затем заполнила пустоту серый. Типы изображений по-прежнему считаются действительными, потому что я могу получить их с помощью getimagesize, а также открыть и просмотреть их. Но они не похожи на оригиналы.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 24 марта 2011

Я думаю, что это прерывание передачи.

Я вижу много случаев: либо ваше соединение было сброшено, в этом случае тестирование сигнала сокета должно позволить вам диагностировать проблему и повторно начать загрузку.

Или есть необнаруженная ошибкаво время передачи (но обычно TCP / IP должен иметь дело с этим) и / или вы не пишете все загруженные правильно (вы думаете, что прочитали все данные на сокете, но чтение дает наименьшее значение, и вы не проверяетевозвращаемое значение, чтобы проверить, что это предполагаемый размер), а затем ваше изображение не является полным.

Обычно полусерые изображения (особенно JPEG) являются признаком файла, который не является полным (заголовки в порядке, поэтомуесть проблема с вами, getimagesize), но JPEG не заканчивается 0xFF 0xD9.Поэтому убедитесь, что вы прочитали все данные, сравнивая с размером, который вы должны прочитать.В конце концов вы можете написать зависимую от формата изображения функцию для проверки целостности файла, например, путем проверки флагов в JPEG.Но это может быть ресурсоемким.

1 голос
/ 24 марта 2011

Просто выполните imagecreatefromstring () и проверьте, не возвращает ли ресурс

1 голос
/ 24 марта 2011

Сравнить заголовок ответа Content-Length с фактическим количеством полученных вами байтов. Могут быть и другие причины, но я ничего не могу сказать, не увидев ваш код, где вы загружаете это изображение.

...