CompressDog

What Does Chroma Subsampling Cost? We Measured 323 Images

Same image, same quality, only the colour sampling changed: SSIMULACRA2 fell from a mean of 87.8 to 82.7, and every single image got worse. Here is the method and the numbers.

Almost every online compressor converts your JPEG to 4:2:0 chroma subsampling without asking. It is the single biggest reason "compressed" photos come back looking slightly wrong, and it happens before any quality slider is consulted.

We wanted a number instead of an opinion, so we measured it.

The claim we tested

Dropping a file from 4:4:4 to 4:2:0 throws away three quarters of the colour data. Vendors justify it with file size. So the question is narrow and answerable:

If you re-encode the same image at the same quality, and change nothing but the sampling, how much quality do you actually lose — and how many bytes do you save?

How we measured

Two things to be explicit about. First, the encoder here is Pillow/libjpeg, not the encoder this site uses — so these numbers describe the cost of the format's default, not the performance of our tool. Second, the sources are themselves JPEGs, which is realistic: most files people compress have already been compressed once.

The results

metric4:4:44:2:0change
SSIMULACRA2 mean87.8282.68−5.15
median87.8383.03−4.85
best case——−1.40
worst case83.1970.08−16.97
file size——−22.1%

And the distribution:

Even the least affected image in the set lost 1.4 points. There is no subset of images where 4:2:0 is free.

Reading SSIMULACRA2 numbers

The scale is not linear in perceived damage, but roughly:

So the average effect here moves an image from the top of the "high quality" band down to the bottom of it. The worst case drops an image out of that band entirely, into territory where the damage is findable without a reference image.

What 22% of file size buys you

A 22% saving is real but unremarkable — it is smaller than the difference between quality 90 and quality 85, and vastly smaller than the 60–75% you get from choosing sensible quality in the first place.

Put differently: for roughly a fifth of the file size, you accept measurable damage on 100% of your images. If you wanted to spend quality for bytes, lowering the quality slider would have been a better trade, because it is reversible — you can re-encode from the original at a different quality. Subsampling is not: once the colour channels have been averaged, that information is gone, and no quality setting brings it back.

Why the tail matters more than the mean

A mean drop of 5.15 points understates the problem, because the loss is not evenly spread. It concentrates on exactly the images people care about:

Our own worst case, a 17-point drop, is the kind of image that looks ruined rather than slightly soft. A tool that quotes you an average is quoting you the wrong number.

What this site does instead

We read the chroma sampling out of your file's header before we touch it, and write it back unchanged. If your image is 4:4:4, it stays 4:4:4. If it is already 4:2:0, we do not pretend to restore it — but we also do not make it worse.

You can see the detected mode on every file you drop in, before you compress. If a tool cannot tell you what your file used, it is not in a position to preserve it.

For more on what the ratios mean and when 4:2:0 is genuinely fine, see what chroma subsampling is.

Reproducing this

The measurement script is in our repository at tools/measure-chroma-cost.py; it takes a directory of images and writes a JSON summary. It depends only on Pillow and a SSIMULACRA2 binary. Point it at your own library — if your images are mostly screenshots or generated artwork, expect the damage to be worse than the averages above.

Everything on this site runs in your browser. Checking your own files costs you nothing and uploads nothing.

Open the compressor