How to Convert HEIC to JPG Without Uploading Your Photos

A measured walkthrough of iPhone HEIC conversion: what the decoder actually does, what happens to metadata and file size, and how to confirm the photo never leaves your device.

Guide Published 2026-11-09

You take a photo on an iPhone, send it to a Windows laptop, and the file opens as a grey box — or the upload form rejects it with “unsupported format”. The photo is fine. It is stored as HEIC, a container built around HEVC compression, and whether a given device can open it depends on codec support that is not installed everywhere.

Converting to JPG solves the compatibility problem. The question this guide answers is what that conversion costs, and how to be certain the photo stays on your machine while it happens.

The measurements below were taken on 2026-10-10 in Chromium using the browser’s WebAssembly decoder (libheif-js). They are saved in docs/test-results/heic-to-jpg.json in our repository. One photo is one data point, not a rule, but it shows the mechanics clearly.

What the conversion actually does

A HEIC file is not a renamed JPEG. It holds frames compressed with HEVC, which stores far more detail per byte than the older JPEG codec. To turn it into a JPG, software has to do three separate things:

  1. Decode the HEVC frame into raw pixels.
  2. Draw those pixels onto a canvas in memory.
  3. Encode that canvas as a JPEG at the quality you choose.

Steps one and three are where quality can be lost. Decoding itself is lossless, but the JPEG encoder is not: it discards information the eye is less likely to notice. That is normal and unavoidable when the target format is JPEG.

In our test, a 718,114-byte HEIC photo decoded and re-encoded to a 343.7 KB JPG at 1280 × 854 pixels with the default quality setting of 85. The smaller file is not a free win — it reflects both the format change and the quality setting. A different photo with more fine detail will land somewhere else.

What happens to the metadata

Apple photos usually carry EXIF data: capture time, camera model, orientation, and often GPS coordinates. Our converter does not preserve that block, because the pipeline extracts raw pixels and writes a new JPEG header. The saved test run records metadataPreserved: false.

That has two consequences.

The good one is privacy. A photo taken at home does not arrive at the recipient carrying its street coordinates. If you were planning to strip location data anyway, the conversion has already done it.

The one to watch is orientation. Phones frequently store rotation as an EXIF tag rather than rotating the pixels. When the orientation tag is dropped, the pixels keep whatever rotation they were stored with, so a photo that relied on the tag can appear on its side. Open the output and confirm it is upright — especially photos taken in landscape on a phone that auto-rotates — and rotate it in an editor if it is not.

If you need the capture date or location later, record it before converting. The original HEIC is the only copy that still has it.

The workflow, step by step

  1. Keep the original. Conversion writes a new file; it does not modify the HEIC. Treat the original as your archive copy.
  2. Drop the HEIC files into Convert HEIC to JPG. You can select several at once.
  3. Pick JPG and a quality level. The default is 85. Higher keeps more detail and produces larger files; lower saves space. For photos you will print or zoom into, stay at 85 or above.
  4. Convert and download. Each photo downloads individually, or you can take the whole batch as one ZIP.
  5. Open one output at 100% zoom. Look at a face, hair edges, and any text in the frame. JPEG damage appears there first.

The engine runs asynchronously, so a batch does not freeze the tab. The real ceiling is device memory: decoding HEIC in WebAssembly costs more than opening a JPEG, because the compressed frame has to be expanded before it can be re-encoded. Batches above 100 MB raise a warning you can skip; phone browsers warn earlier. There is no artificial per-day quota.

When the converted file is still too large

JPGs from modern phone cameras are often 2–5 MB, which is fine for most uses and too large for forms with a 1 MB or 100 KB cap. Do not convert again at a lower quality — that adds a second generation of loss on top of the first.

Instead, treat the JPG as the source and use the normal size workflow: resize to the dimensions the form needs, then compress at the highest quality that meets the byte limit. Our guides cover both levers in detail: Compress Image for quality, and the measured order of operations in How to Get a Photo Under 100 KB for an Application Form.

If you are converting an older JPG rather than a HEIC and want the location data gone, Remove EXIF Data strips the metadata block without re-encoding the pixels.

How to confirm nothing was uploaded

Conversion tools that upload are common, and a photo library is exactly the kind of data worth not handing to a stranger. You do not have to take our word for it: open your browser’s developer tools, switch to the Network tab, clear it, then convert a photo. A file upload would appear as a POST or PUT request, usually with a multipart body and a size measured in megabytes.

In the saved test run for this tool, zero external HTTP requests were observed during decoding and encoding. The network panel walkthrough covers the same check in Chrome, Firefox, and Safari, including the offline test, which is the strongest version: load the page, disconnect the network, then convert.

What conversion cannot fix

  • It does not restore detail that was never captured. A soft photo stays soft.
  • It does not preserve HDR or depth data. A JPEG is an 8-bit image; the extra range in a modern HEIC frame is flattened.
  • It does not keep the original metadata. If a form requires a capture date in EXIF, this pipeline will not supply one.
  • It does not convert every HEIC variant. If a file is corrupt or uses an unsupported profile, the decoder will fail and you will see an error rather than a blank image.

For sharing, printing, and uploading to forms that only accept JPG, the trade is worth it. For archiving, keep the HEIC.

The short version: decode, re-encode at quality 85, check the orientation, then resize only if a size limit demands it. Everything happens in the tab you already have open.

Tools used in this guide