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
- 323 images from a private collection of 1024-pixel artwork, up to 6 per collection so no single style dominates.
- Each was scaled so its longest side is 768 px, then saved as PNG. That PNG is the reference.
- From the same source, we encoded twice at quality 90, changing exactly one parameter:
subsampling=0(4:4:4) versussubsampling=2(4:2:0). - Each result was scored against the reference with SSIMULACRA2, the current perceptual metric of choice in image-coding work. Higher is better; 0–100.
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
| metric | 4:4:4 | 4:2:0 | change |
|---|---|---|---|
| SSIMULACRA2 mean | 87.82 | 82.68 | −5.15 |
| median | 87.83 | 83.03 | −4.85 |
| best case | — | — | −1.40 |
| worst case | 83.19 | 70.08 | −16.97 |
| file size | — | — | −22.1% |
And the distribution:
- 323 of 323 images got worse. Not one was unaffected.
- 153 of 323 (47%) lost more than 5 points.
- The worst single image went from 87.05 to 70.08 while shrinking from 311 KB to 233 KB.
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:
- 90+ — visually lossless; a careful side-by-side at 100% finds nothing.
- 80–90 — high quality. This is where a good q90 JPEG lands.
- 70–80 — a trained eye finds it without a reference, especially in saturated colour.
- 60–70 — clearly degraded to anyone looking at the right area.
- below 50 — obvious.
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:
- saturated reds and magentas
- thin coloured text and one-pixel UI lines
- flat colour with sharp edges — logos, illustrations, screenshots
- anything synthetic or generated, which is usually 4:4:4 to begin with
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.