Исправить поврежденный png (усеченные данные) в PHP

У меня есть png, который предположительно поврежден, но все еще загружается во всех программах просмотра изображений на рабочем столе, но не php.

Ошибка при звонке imagecreatefrompng является:

Предупреждение: imagecreatefrompng(): gd-png: фатальная ошибка libpng: ошибка чтения: усеченные данные в test.php в строке 45

Предупреждение: imagecreatefrompng (): ошибка gd-png: setjmp возвращает состояние ошибки в test.php в строке 45

Предупреждение: imagecreatefrompng(): 'test.png' не является допустимым файлом PNG в test.php в строке 45

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

pngcheck test.png
test.png  file doesn't end with an IEND chunk

1 ответ

Раздел 11.2.1 стандарта PNG под разделом критических кусков говорит

Действительный поток данных PNG должен начинаться с подписи PNG, за которой сразу следует фрагмент IHDR, затем один или несколько фрагментов IDAT, и должен заканчиваться фрагментом IEND. Только один блок IHDR и один блок IEND допускаются в потоке данных PNG.

Как говорит ошибка, изображение не имеет порции IEND. Это недопустимый образ PHP, и PHP имеет полное право отказаться от обработки изображения.

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

Другие вопросы по тегам