HEIC to JPG converter
The same four presets the iPhone app uses.
Pixels. Leave empty to keep the original dimensions. Never enlarges.
MB. Leave empty to keep the quality above. Re-encodes until it fits and reports the quality it settled on.
A name for the batch; numbering is added automatically. Empty keeps each original name.
No file chosen yet.
The decoder is WebAssembly running in this tab. Your photo is read from disk into memory and never sent to a server.
Every online HEIC converter faces the same problem: browsers cannot decode HEIC, so the usual answer is to upload your photo to a server that can. That works, and it also means your photo now exists on a machine you do not control, with whatever metadata it was carrying. This converter takes the other route - a HEIC decoder compiled to WebAssembly, plus the JPEG encoder your browser already has, so the whole round trip happens locally.
What the quality setting actually does
JPEG is lossy. The quality value decides how much detail the encoder is allowed to discard, and it trades file size against visible artefacts around edges and in smooth gradients. The four presets here mirror the ones in the iPhone app so that a JPG made in either place looks the same.
There is a max file size setting, and it works the only way such a thing can: it re-encodes at progressively lower quality until the file fits, and drops the pixel dimensions if quality alone cannot get there. That is worth knowing rather than trusting blindly, so the panel reports the quality it settled on next to every result. The iPhone app has no equivalent - it sizes by quality and dimension, not by bytes.
- Maximum, 1.0 - largest files, nothing thrown away by choice.
- High, 0.85 - the sensible default for anything anyone will look at closely.
- Balanced, 0.7 - noticeably smaller, holds up fine for web and email.
- Small, 0.5 - visible artefacts on detailed photos, use when size dominates.
Resizing by dimension, not by target size
The longest-edge setting scales the image down before it is encoded. This is usually the honest fix when a form rejects a photo for being too large, because a 4032-pixel-wide photo is far bigger than most upload forms ever needed.
Leaving it empty keeps the original pixel dimensions. Scaling only ever goes down - a photo is never enlarged, because there is no detail to enlarge it with.
What happens to metadata here, and what happens in the app
These two behave differently, and it matters enough to spell out. This browser converter re-draws the photo onto a canvas and asks the browser to encode a JPEG from those pixels. Pixels are all that survive. Capture date, camera, lens and GPS are all gone from the output - convenient if you are stripping metadata on purpose, a genuine loss if you wanted the date kept.
The iPhone app does something more selective: it removes location and keeps the capture date and camera details, so converted photos still sort correctly in a photo library. If it is the metadata specifically you are interested in, inspect the original file first and see what is actually in there.
Several files at once
You can select more than one file and each is converted with the same settings, which is the normal case - a set of photos from one shoot, headed for one upload form. Each result gets its own download, and each keeps its original filename with a .jpg extension.
Converting happens one file at a time so a large batch does not exhaust memory. Progress is reported as it goes. On an iPhone, the app does this across an entire album without asking you to pick files individually.
Decoding uses libheif compiled to WebAssembly (LGPL-3.0), and metadata is read with exifr (MIT). Both run locally in your browser.
Common questions
Are my photos uploaded anywhere?
No. Decoding and encoding both happen in this browser tab. You can verify it in your browser's network panel - no request carries the image.
Does the JPG keep the capture date?
Not from this browser tool. Canvas encoding produces pixels only, so all EXIF is dropped. The iPhone app is the one that keeps capture date and camera while removing GPS.
Can I make the file a specific size, like under 2 MB?
Set a max file size and the converter re-encodes until it fits, showing the quality it ended on. If you would rather keep quality fixed, reduce the longest edge instead - it is usually the bigger win and costs less detail.
Why is my JPG bigger than the HEIC was?
That is normal and expected. HEIC is a much more efficient format - the same photo as JPEG is routinely one and a half to two times larger. You are trading file size for compatibility.
What about PNG, WebP or PDF output?
JPG only, which is the same choice the app makes. JPG is what upload forms, print services and older software actually accept.
How many files can I convert at once?
There is no fixed limit. They are processed one after another, so a big batch takes proportionally longer but will not run out of memory.