问题
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

pngcheck test.png
test.png file doesn't end with an IEND chunk
回答1:
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 PHP 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?
来源:https://stackoverflow.com/questions/41338201/fix-corrupt-png-truncated-data-in-php