Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How is a 256x256 24-bit gradient PNG only 777 bytes?

Here's the file in question:

Gradient PNG

If you open this PNG image in an HEX-Editor you will notice this file is only 777 bytes large. How is this possible? Note that each pixel has a different color value!

A 24 bit 256x256 image that has unique pixels should be at least 197KBytes large.
256*256*3 bytes = 196608 bytes

Is this using some hidden feature of PNG files or using some kind of hack?

Edit: Just as a sanity check, I've encoded the PNG as Base64, and sure enough, it is as small.

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAAACXBIWXMAAABIAAAASABGyWs+AAACu0lEQVR42u3TAQkAMBDEsHuYf80T0oRa6G07qdrbDbIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYA0A5BmANIMQJoBSDMAaQYgzQCkGYC0DxplBfxP7XIvAAAAAElFTkSuQmCC
like image 546
Bloc97 Avatar asked Nov 16 '25 10:11

Bloc97


1 Answers

The image was constructed so that PNG's filter type 4, the Paeth filter perfectly predicts the pixel value for all lines after the first, except for a difference of 1 in the first green value, giving a green progression down and to the right. The first line, which is an increment of reds, uses filter type 1, Sub, which results in the series 1 0 0 1 0 0 ... You end up with 196,098 zeros, 511 ones, and 255 fours, which is highly compressible.

like image 133
Mark Adler Avatar answered Nov 18 '25 21:11

Mark Adler



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!