HEVC frames in an ISOBMFF box
A .heic file is not really a new image format so much as a new arrangement of existing parts. The pictures inside it are still frames coded with HEVC, the video codec also known as H.265, and they sit in an ISO base media file format container, the same box-based structure that holds an MP4. Apple made it the iPhone default with iOS 11 in 2017.
The consequence of that lineage is efficiency: a video codec’s intra-frame compression is a generation ahead of JPEG’s, so the same photo at the same visual quality takes much less space. The other consequence is licensing. HEVC is patent-encumbered, which is a large part of why HEIC never spread beyond the ecosystem that decided to pay for it, and why Windows still asks you to buy a codec extension to preview a file your phone produces by the hundred.
So the format is technically good and practically awkward. JPEG is the opposite, and that asymmetry is the entire reason this page exists.
Converting a camera roll to JPG
- Drop your HEIC or HEIF files into the box above, or use Choose files. Files accumulate across drops, so you can add several folders before starting.
- Choose a JPG quality. Balanced (recommended) is right for sharing and uploading, High (largest file) for printing or editing.
- Click Convert HEIC to JPG. Each photo is decoded and re-encoded on your own device, one after another.
- Download each JPG. Every file keeps its original name with a
.jpgextension in place of the old one.
High, Balanced and Small in real encoder numbers
The three choices are not vague labels. They set the JPEG encoder’s quality parameter to 0.95, 0.85 and 0.7 respectively, on the 0 to 1 scale the browser’s encoder uses.
Balanced at 0.85 is where almost everyone should stay. It is high enough that compression artefacts do not appear in skies, skin tones or the soft edges HEVC handles so well, and low enough that the file does not balloon. High at 0.95 is worth the extra bytes when the photo will be printed, cropped hard, or edited again, because a later edit re-encodes whatever you give it and starting closer to the source helps. Small at 0.7 is a tool for a specific problem: a form that will not accept your file. If you need to hit an exact figure rather than guess, Compress Image to Exact Size searches for the setting instead.
The decoder: libheif compiled to WebAssembly
Browsers cannot be relied on to decode HEIC. Safari on Apple hardware manages it because the platform already has the codec; Chrome and Firefox on a typical Windows or Linux machine do not. Dropping a HEIC into a plain <img> tag therefore works for some visitors and not others, which is no basis for a conversion tool.
So the decoding is done explicitly, by libheif, the open-source HEIF and HEVC decoder that most of the ecosystem is built on, compiled to WebAssembly and run inside this tab. It reads the container, decodes the primary image, and returns raw pixels. Those pixels are then handed to the browser’s own JPEG encoder to produce the file you download. The upshot is that the decode no longer depends on what your platform happens to support, and that nothing has to be uploaded for a codec your machine is missing. The encode is still the browser’s own, so two browsers given the same photo at the same preset can hand back files that differ by a few bytes.
Two lossy formats in a row
HEVC is lossy and JPEG is lossy, so a converted photo has been through two generations of compression rather than one. At Balanced or High this is not something you will see on a screen, but it is real, and it is cumulative: converting the same photo back and forth repeatedly will visibly degrade it.
Treat the HEIC as the master copy and the JPG as a distribution copy. Keep the originals on the phone or in a backup, convert when something needs a JPG, and do not convert a JPG back to HEIC hoping to recover anything. If you would rather not add a second lossy pass at all, HEIC to PNG writes the decoded pixels losslessly, at the cost of a much larger file. The trade-offs are laid out at length in what changes when you convert HEIC to JPG.
What the JPG does not inherit
Because the conversion goes through raw pixel data, none of the file’s metadata makes the journey. GPS coordinates, camera model, lens, exposure settings and the capture timestamp are all absent from the JPG, as is any colour profile the original carried.
For most people that is a bonus, and it means running the output through Remove EXIF Data from Photos afterwards would find no metadata left to strip, while still costing the picture another lossy JPEG save. It does mean a photo library that sorts by capture date will fall back to the file’s creation date instead, so if that ordering matters, keep the originals. Everything else in this family is on the image tools hub.