Fix corrupt png (truncated data) in PHP

3.5k views Asked by At

I have a png which is supposedly corrupt, but still loads in all desktop image viewers, but not php.

The error when calling imagecreatefrompng is:

Warning: imagecreatefrompng(): gd-png: fatal libpng error: Read Error: truncated data in test.php on line 45

Warning: imagecreatefrompng(): gd-png error: setjmp returns error condition in test.php on line 45

Warning: imagecreatefrompng(): 'test.png' is not a valid PNG file in test.php on line 45

Here is the image in question is there anyway of fixing the image in PHP before further processing it? I can fix it by opening it a desktop image viewer and then re-saving as png, but I need to fix any images server side as they come in with this corrupt format.

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

There are 1 answers

1
hostingutilities.com On

Section 11.2.1 of the PNG standard under the section critical chunks says

A valid PNG datastream shall begin with a PNG signature, immediately followed by an IHDR chunk, then one or more IDAT chunks, and shall end with an IEND chunk. Only one IHDR chunk and one IEND chunk are allowed in a PNG datastream.

As the error says the image does not have an IEND chunk. It is not a valid PNG image, and PHP has every right to refuse to process the image.

With that said, how are the images coming to you. Are you connecting to another system to retrieve the images, pulling them from a database, or are they being uploaded by the user?