How much quality does HEIC to JPG actually cost?

I converted one real iPhone photo at three quality settings, then compared every single pixel against the HEIC it came from. Here is the damage, in numbers.

Average error 0.92 of 255 67.33% of pixels unchanged PSNR 38.22 dB at 85%

Short answer: at the default 85%, the JPG differs from the HEIC by an average of 0.92 levels out of 255 — about a third of one percent. Two thirds of the picture comes through untouched: 67.33% of pixels are exactly the same values, and only 0.51% differ by 16 levels or more. The worst single pixel in the frame is off by 180, and it sits on a hard edge, which is where JPEG always struggles.

What I measured on this site: one real iPhone HEIC — 41,465 bytes, 700×476, which is 333,200 pixels — converted today at 75%, 85% and 95%, with each output downloaded and compared against the HEIC decoded on the same machine. The 85% JPG is 38,078 bytes, smaller than the 41,465-byte HEIC it came from. So at the default setting you are not paying in size; you are paying in a thin layer of detail along the edges.

How the comparison was done

  1. Convert the same HEIC three times on the live converter, at 75%, 85% and 95%.
  2. Download each JPG.
  3. Decode the HEIC and each JPG on the same machine, giving three pairs of pixel arrays of identical size.
  4. Subtract them: mean absolute error, root-mean-square error, PSNR, the worst single pixel, and what share of pixels move by more than 2, 8, 16 and 32 levels.

One honest caveat up front: the reference is my decode of the HEIC, and the page decodes with its own build. A small part of every number below could be two decoders disagreeing rather than JPEG losing something. I did not separate the two, so treat these as “what you get out versus what went in”, not as a pure measure of the JPEG step.

Measured: three settings, one photo

SettingJPG outMean error (of 255)RMSEPSNRWorst pixelPixels unchangedPixels off by 16+
75% — Smaller file30,231 B1.2383.78236.58 dB17766.28%1.31%
85% — Good (default)38,078 B0.9203.13138.22 dB18067.33%0.51%
95% — High57,617 B0.5482.62639.75 dB17770.76%0.3%

The middle column is the one to read: an average error of 0.92 out of 255 means that if you picked a pixel at random, it moved by less than one level. Broken down by how much pixels move at 85%: 26.72% shift by 2 levels or more, 3.28% by 8 or more, 0.51% by 16 or more, and 0.19% by 32 or more. The damage is not spread evenly — it piles up along edges and fine detail, which is exactly the shape of JPEG loss.

What the worst pixel tells you

A single pixel off by 180 sounds alarming next to an average of 0.92, and the gap between those two numbers is the whole story. It means the loss is concentrated: a handful of pixels at high-contrast boundaries carry nearly all of it, while the bulk of the frame is untouched. Raising the quality does not fix that — the worst pixel is 177 at 75% and still 177 at 95%. What the higher setting buys is breadth, not the extremes: the share of pixels off by 8 or more falls from 5.84% to 0.87%.

Is 95% worth it?

Judge it by what you get for the bytes. Going from 75% to 95% nearly doubles the file — 30,231 to 57,617 bytes — and moves PSNR from 36.58 dB to 39.75 dB, while the mean error halves from 1.238 to 0.548. That is real improvement with sharply diminishing returns, and it lands you with a file 39% larger than the HEIC you started from. At 85% you get the middle: 38,078 bytes, smaller than the original, with two thirds of the frame untouched.

A control: an ordinary JPEG encoder

To check that these numbers are not something odd about this page, I re-encoded the same decoded pixels with a plain JPEG encoder at quality 85 on my own machine:

OutputBytesMean errorRMSEPSNRWorst pixel
This page at 85%38,0780.9203.13138.22 dB180
Local encoder at quality 8538,8690.8072.04541.92 dB36

Similar size, similar average error — so this is ordinary JPEG behaviour, not a strange encoder. The one number that does not match is the worst pixel: 180 versus 36. Two encoders handling hard edges differently (chroma subsampling is the likely culprit) would do that. I did not dig into which, so I am not going to claim a cause — but it is a reminder that “quality 85” is not one single recipe across encoders, and that the quality scales are not directly comparable either.

Questions

Is 85% good enough?

For handing a photo to a person or a website, today’s numbers say yes: average error 0.92 of 255, 67.33% of pixels identical, and a file smaller than the HEIC it came from. I did not run a viewing test, so I am giving you measurements, not an opinion about what your eye can see.

Does 95% make it lossless?

No. It is still JPEG. At 95% the worst pixel is off by 177 and 20.35% of pixels still differ from the original by at least 2 levels. It is closer, not exact.

Does converting make the file bigger?

Not at 85%, not with this photo: 41,465 bytes in, 38,078 bytes out. At 95% it does — 57,617 bytes.

Is this measured on a real photo?

One real iPhone photo, 700×476. That is one picture, and this is a photo-specific question — a shot full of fine detail would measure worse than a soft one. The size-and-speed side of the trade is measured across more files in the file-size runs.

Does the conversion keep the resolution?

Yes. All three outputs are 700×476, and larger files keep their full size too — verified up to 12,000×9,000 in the large-file test.

What I could not measure

Want to check it on your own photo? Convert it here and compare the two files yourself — nothing leaves your device.

First published: 27 September 2026