You copied photos off an iPhone and the upload form, the CMS, and your coworker's
laptop all reject them. The files are HEIC, Apple's container built on the same
compression family as HEVC video. Safari and Apple hardware read it natively. Most
of the rest of the web does not. Conversion to JPG is the fix, and this guide walks
through the converter we actually ship rather than a generic list of apps.
What happens when you click Convert
Our HEIC converter does not upload your photos anywhere. On the first conversion it
loads a decoder library called heic2any into the page, then decodes each file inside
the browser tab and re-encodes the pixels as JPG or PNG. The decoded image exists in
your device's memory and nowhere else.
Three mechanics matter for daily use:
1. The file picker and the drop zone accept only files whose names end in .heic or
.heif, checked case-insensitively. Everything else is silently ignored.
2. Files convert one at a time in sequence, and each row in the list carries its own
status: pending, converting, done, or error.
3. A failed file does not stop the batch. The error is caught, the row turns to
error, and the next file starts.
The extension check filters by name only. A photo renamed to .heic without actually
being HEIC passes the filter and then fails during decoding, which is the correct
outcome but explains why the error appears at conversion time and not at upload.
Output formats and the quality setting
You choose between JPG and PNG before converting, and the choice applies to the whole
pending batch. This is the decision rule the code implements:
- If output is JPG, the quality slider runs from 10 to 100 percent and defaults to
85. The number maps directly to the JPEG encoder quality.
- If output is PNG, the quality value is ignored. The component passes no quality
parameter at all, because PNG is lossless and has no quality dial.
Use JPG for photos destined for the web. Use PNG only when you need pixels preserved
exactly, and expect larger files. JPEG at quality 100 also produces files larger than
the HEIC originals in most cases, because HEIC compresses more efficiently than JPEG.
If small output is the goal, leaving quality at the default 85 beats pushing it up.
One metadata note, stated honestly. The pipeline decodes pixels and re-encodes them.
Nothing in the component reads, copies, or writes EXIF data, so treat converted files
as metadata-free until you check them yourself. That is a privacy benefit if the
originals carry GPS coordinates, and a loss if you depended on capture dates inside
the files.
Failure modes and how the tool responds
Browser-side conversion has real limits. These are the ones you will hit:
- Corrupted or truncated HEIC files throw during decode. The row shows the error and
its message, and the rest of the batch continues.
- Apple Live Photos are HEIC sequences containing multiple frames. When the decoder
returns multiple frames, the tool takes the first one and drops the rest. You get a
still image, never the motion part.
- There is no server, so there is no server-side size cap. The real ceiling is your
device's memory. A very large batch can exhaust a tab before it finishes, so
convert in groups of a few dozen rather than thousands at once.
- Failed items are not dead ends. The Convert button includes every file whose status
is pending or error, so one click retries exactly the failures.
Downloads use the original filename with its extension swapped to .jpg or .png. The
Download All button staggers each download by 100 milliseconds, because firing dozens
of simultaneous downloads at once makes browsers block the cascade.
Convert HEIC to JPG, step by step
Run this sequence every time:
1. Gather your files and confirm each name ends in .heic or .heif. Rename anything
with a different extension before you start.
2. Drag the files onto the drop zone or click it to pick them. Confirm each intended
file appears as a pending row.
3. Select JPG as the output format.
4. Leave quality at 85 for photos. Raise it only after a test file shows visible
artifacts, and remember the file grows as the number climbs.
5. Click Convert and watch the statuses. Do not navigate away mid-batch, the work
lives in the tab.
6. Download a single file with its button, or use Download All for every finished
row.
7. If any row shows an error, click Convert again. Only the failed files re-run.
8. Spot-check one converted image before clearing the list.
The originals are never modified or deleted. Clearing the list removes them from the
page, not from your disk, so keep the HEIC files as your archival copies.
The privacy claim, and how to verify it
The statement this tool makes is narrow and checkable: your photo bytes are never
transmitted. Open your browser's network panel, run a conversion, and watch. You will
see the decoder library itself download once on first use, because code has to come
from somewhere, and zero requests carrying your images.
That is the difference from server-based converters. Their price for a large size
limit is that your photos, including their embedded metadata, sit on someone else's
disk for at least a while. If your photos are client work, medical, or location
sensitive, that trade is not worth making when a local option exists.
Checklist before you convert a batch
- Every filename ends in .heic or .heif.
- Output format chosen once for the whole batch.
- Quality left at 85 unless a test says otherwise.
- Batch kept to a size your tab can hold in memory.
- One converted file opened and inspected before the rest are trusted.
- Originals kept as the archival copies.
- Failed rows retried with a second Convert click before you assume the files are
bad.
HEIC to JPG conversion is a solved problem when it happens on your own hardware. The
pipeline is short: filter by extension, decode with heic2any, re-encode at the quality
you chose, download. Knowing which step failed tells you whether the file or the
batch size is the culprit.
How did your conversions go, and what file sizes did you see at the default quality
compared to the originals? Run a test batch through our
[HEIC converter](https://webrecast.com/en/heic-converter) and compare the numbers
yourself.