Исправить поврежденный 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 имеет полное право отказаться от обработки изображения.
С учетом сказанного, как изображения приходят к вам. Вы подключаетесь к другой системе для получения изображений, извлечения их из базы данных, или они загружаются пользователем?