HEIC to JPG without losing quality

The short answer first: JPEG is a lossy format, so lossless JPG conversion is impossible by definition - every JPEG encode throws information away. What you can do is make the loss invisible to the eye, which for almost every practical purpose amounts to the same thing. This page covers where the loss comes from, how to set the parameters, and when you should use PNG instead.

Last updated:2026-10-14

Lossless JPG conversion is an impossible goal

Start with the part that causes the most confusion: JPEG is a lossy compression format. That is a property of the format itself, not of whichever tool you happen to use. The pipeline splits the image into 8x8 blocks, applies a discrete cosine transform, then quantises the resulting coefficients - and quantisation is irreversible information loss.

So any claim of lossless HEIC to JPG conversion can only mean one of two things: marketing language, or what the writer actually means by visually lossless.

Mathematically lossless conversion has exactly one route: convert to a lossless format. PNG, TIFF, and WebP in lossless mode all reproduce every pixel exactly. The cost is size - a photo converted to PNG typically becomes three to five times larger.

But for almost everyone, the real question is not whether the loss is mathematically zero. It is how much loss the eye can actually see. That is where the rest of this page goes.

What a conversion actually costs

Converting HEIC to JPG costs you four things, and only one of them is image quality.

Generation loss. The HEIC file has already been through one lossy encode; converting to JPG encodes it a second time. That layered loss is the main price of changing formats.

Quantisation strength. The JPEG quality setting controls the quantisation tables directly. Lower values discard more detail. This is the one dial you can actually turn.

Chroma subsampling. JPEG commonly uses 4:2:0, halving the resolution of colour information. Human vision is far more sensitive to brightness than to colour, so most photos get away with it - but coloured fine lines and small red text go visibly mushy.

Metadata and colour management. If any step in the chain ignores the embedded ICC profile, colours shift across the whole image. That is not compression loss but colour loss, and it is more conspicuous than softness. EXIF capture time, GPS and orientation flags can also be dropped at this stage.

Choosing parameters that keep the quality

We ran our own conversion pipeline over two real photographs at five quality settings, measuring both file size and PSNR (peak signal-to-noise ratio - higher means closer to the original):

JPG qualitySample A sizeSample A PSNRSample B sizeSample B PSNR
60%516.4 KB41.8 dB610.9 KB39.2 dB
70%569.3 KB45.7 dB683.1 KB44.3 dB
80%620.1 KB47.2 dB740.2 KB45.7 dB
90%718.5 KB49.3 dB866.6 KB47.7 dB
100%2265.1 KB59.3 dB2961.5 KB57.6 dB

The key rows are the last two. Going from 90% to 100% triples the file size and adds about 10 dB of PSNR - but once PSNR passes roughly 45 dB, the eye stops being able to tell. The extra bytes buy you nothing but a bigger number.

So the answer for without losing quality is 90%. It lands above 47 dB on both samples, inside the range where the difference is invisible, at a third of the size of 100%. The full method and data are on the HEIC to JPG quality measurements page, and you are welcome to cite them.

Three other things matter as much as the quality setting:

  • Do not resize. The moment you change the resolution, pixels get resampled. That is a separate operation from compression, and the loss is more visible.
  • Do not convert repeatedly. Every conversion is a fresh lossy encode, and the losses accumulate. Keep the original and convert once.
  • Do not insert intermediate formats. HEIC to PNG to JPG is an extra step that buys nothing: the PNG stage adds no information and only more files.

When to use PNG instead

If your actual requirement is that not a single pixel may change, then JPG is the wrong target and you want PNG. Three cases fall into that category:

  • You need transparency. The JPEG format has no alpha channel at all; there is no compromise available here.
  • You will keep editing or re-saving. Screenshots, line art, UI assets, designs that go through several revisions - each JPEG save costs you again.
  • The image is flat colour and sharp edges. JPEG block artefacts are most obvious on this kind of content, and PNG stays reasonably small.

But remember the trade-off: PNG has almost no compression for continuous-tone photographic content. A 3 MB photo can become 10 MB or more as PNG. It is not a better choice - it is a different one.

How to check the quality of your own output

You do not need instruments. Two methods are enough.

By eye: view at 100% and look at the gradients. Skies, walls, foreheads and cheeks - the large smooth transitions are where compression loss shows up first. If you cannot see banding or blocking there, it is fine for everyday use.

By measurement: compute PSNR and mean colour difference. PSNR captures overall pixel error; mean colour difference captures colour shift. The three scripts we used live in tools/testkit/ in the repository: bench_make_heic.py builds the samples, bench_run_quality.js drives the real conversion page and retrieves the output, and bench_report.py scores it. The whole pipeline is reproducible.

One trap worth flagging: if you compute PSNR by feeding squared differences through PIL's Image.point lookup table, the result gets clamped at 255. MSE is systematically understated and the PSNR comes out too high. The correct approach is to accumulate exactly, per channel, from the histogram. bench_report.py ships a --selftest flag for exactly this reason.

The bottom line

Everything above reduces to one line: stop looking for a lossless tool and start picking a setting whose loss you cannot see.

  • Everyday sharing, social posts, archiving - quality 90%. Visually indistinguishable, at a third the size of 100%.
  • Master copies you will edit later - do not convert to JPG. Keep the original HEIC, or go to PNG.
  • When size is the priority - 70-80%, together with a sensible output resolution. Quality stays in a usable range.

Our converter lets you set the quality manually and runs entirely in your browser. Your photos are never uploaded, and the intermediate results never leave your device.

Open the converter