The following tools were tested on PNG test corpus by Cédric Louvrier and Guetzli photo dataset (converted to JPEG at highest quality) by Jyrki Alakuijala.

It is highly recommended to view the images full size at 100% zoom. Some images especially on mobile are scaled down by the browser, making it harder to spot the differences.

OptimageImageOptimGuetzliJPEGminiTinyPNGSquashGoogle Photos
Lossless optimization
PNG274 KB296 KB304 KB
JPEG16.9 MB16.9 MB
Visually lossless optimization
PNG268 KB298 KB217 KB
JPEG3.72 MB2.08 MB4.21 MB3.74 MB3.58 MB3.63 MB2.68 MB

*Score shows how many images are visually indistinguishable from originals under normal viewing conditions. Hover over results to see the actual number of images. Additional tests revealed other issues.


  • ImageOptim scored 24/24 in lossy PNG compression but did not perform well on gradients and flat graphics in extended testing.
  • Tools like TinyPNG and Crunch use the original PNGQuant for color quantization, and generally perform worse than ImageOptim in terms of quality and lossless compression.
  • TinyPNG images could be losslessly compressed by 6.3% more using Optimage.
  • Guetzli achieved best quality/size ratio in some cases but failed to provide consistent quality especially at lower quality settings.
  • Guetzli is extremely slow requiring approximately 1 minute of CPU and 100 MB of memory per 1 MPix.

Test samples

Excessive ringing artifacts in JPEGmini and other tools except Guetzli
JPEGmini – 84 408 bytes, Optimage – 70 127 bytes
Excessive ringing artifacts in chroma in JPEGmini and other tools except Guetzli
JPEGmini – 54 943 bytes, Optimage – 74 338 bytes
Destructive chroma subsampling in ImageOptim, TinyPNG and Squash
ImageOptim – 76 680 bytes, Optimage – 140 976 bytes
Visible block boundary artifacts on soft gradients in Guetzli, JPEGmini and ImageOptim
Guetzli – 155 512 bytes, Optimage – 101 425 bytes
Blurred fine details in all other tools
Guetzli – 159 855 bytes, Optimage – 78 811 bytes
Blurred fine details in all other tools
JPEGmini – 26 759 bytes, Optimage – 26 983 bytes
Strong dithering artifacts on gradients in TinyPNG
TinyPNG – 16 344 bytes, Optimage – 539 bytes
Gradient banding in TinyPNG
TinyPNG – 11 968 bytes, Optimage – 12 227 bytes

Additional tests

Broken gradient in ImageOptim and TinyPNG
ImageOptim – 5 127 bytes, Optimage – 14 296 bytes
Noticeable color shift when stripping metadata in ImageOptim
ImageOptim – 72 313 bytes, Optimage – 176 935 bytes
Rotated photo when metadata containing Exif Orientation tag stripped in ImageOptim, also ImageOptim could not strip sensitive metadata in a highly compressed image, none of the tools could fix orientation losslessly, JPEGmini added a hidden metadata with version information and image hash
ImageOptim – 749 364 bytes, Optimage – 1 341 604 bytes
High local error in all other tools except Guetzli
JPEGmini – 4 382 bytes, Optimage – 1 448 bytes
Significant quality degradation caused by overcompression in JPEGmini and all other tools
JPEGmini – 18 122 bytes, Optimage – 25 791 bytes