HEIC to JPG Converter
Converts an iPhone HEIC photo to JPEG or PNG in your browser, decoding it properly with WebCodecs rather than re-saving a preview.
This tool needs JavaScript: the photo is decoded in your browser, and it is never uploaded.
JPEG for photographs. PNG is lossless and will usually be several times larger than the HEIC you started with.
85 to 90 is the range where a photograph stops getting visibly better and keeps getting bigger.
Decoding the photo…
No photo yet. A HEIC holds an HEVC-coded picture, often cut into tiles, and the video decoder in the browser is what turns it back into pixels.
Your phone takes HEIC and everything else wants JPEG. This converts one to the other in your browser, with the real decoder rather than a preview image.
The usual story is that no browser can open a HEIC, and for <img> tags that is still true outside
Safari. It has not been the whole story since WebCodecs shipped. A HEIC is two things stacked: an ISO
base media container, the same box format as an MP4, holding a picture coded with HEVC, which is a video
codec browsers already decode. What was missing was never the codec. It was something to read the
container and hand the coded picture to the decoder, and that is what this is.
The practical consequence is that this does not work everywhere, and it says which case you are in before it starts. Safari has an HEVC decoder. Chrome and Edge have one where the machine does, which means a recent Mac or a Windows PC with the HEVC extensions installed. Firefox has none, and a tool that pretends otherwise would waste your time twice.
How to use
- Choose a .heic or .heif file, or drop one on the box.
- Pick JPEG or PNG, and the quality if you chose JPEG.
- Download the result.
Example
A photograph from an iPhone:
4032×3024 · 2.1 MB in, 1.4 MB out · 24 tiles decoded
Codec hvc1.1.6.L153.B0
Grid 6×4
Rotated 90°
The picture is decoded rather than re-encoded from a preview: these are the
full-size pixels, not the JPEG thumbnail a HEIC sometimes carries alongside.
Twenty four tiles for one photograph is normal. Phones cut a large picture into 512 pixel squares so the hardware encoder can work on them in parallel, and the container holds a recipe saying how to lay them back out.
Pitfalls
Firefox cannot do this. No HEVC decoder, so no HEIC. The tool checks before it starts and says so rather than failing halfway through.
Chrome needs the platform to help. On macOS the decoder is in the operating system and it works. On Windows it depends on whether the HEVC Video Extensions are installed, which is a paid item in the Microsoft Store on some machines. On Linux it usually will not.
The metadata does not come across. Time, place, camera and lens live in the container, and the output is written from the pixels alone. For a photograph you are about to put on a website that is the right way round, and if you needed the EXIF it is worth knowing it is gone.
Ten-bit photographs lose a little. Newer phones store ten bits a channel, and JPEG holds eight. The difference shows only in the shallowest gradients, most often a clear sky.
Live Photos are a still plus a video. Only the still is converted. The moving part is a separate item in the file and this does not extract it.
Rotation lives outside the picture. The container carries it, and it is applied here. A converter that ignores that box gives you a landscape image of a portrait scene, which is the most common way this conversion goes wrong.
The output is a fresh encode. Converting to JPEG at 88 is a good default; going back and forth between formats repeatedly will soften an image, as re-encoding always does.
Compatibility
The container is read with a parser written for this and the picture is decoded by the browser’s own
HEVC decoder through VideoDecoder, which needs Chrome 107, Edge 107 or Safari 16.4 and a machine whose
platform can decode HEVC. Nothing is uploaded, and nothing is installed.
Files up to 60MB and up to 400 tiles, which is more than any single photograph. Grids, single images and rotated pictures are handled; a file holding only a thumbnail, or an image sequence rather than a still, is refused with a reason.
Frequently asked questions
Why does it say my browser cannot decode this?
VideoDecoder.isConfigSupported reports whether this machine and
browser can decode this exact profile of HEVC, and the answer is no on Firefox everywhere, and on Chrome
where the platform has no decoder. Safari, and Chrome or Edge on a recent Mac, will work.