Converter · No upload

Convert HEIC to JPG on your device

Choose iPhone photos and download them as JPGs at the quality you choose.

Read here — Statusidle Files— OutputJPG Network since file read—

A HEIF the decoder cannot open (AV1 or JPEG inside, or damage) is refused as undecodable; no-image files are refused by name. Several stills in one file give numbered JPGs. A row counts images that fail to decode; images the decoder drops before the page sees them are not counted. 10-bit and HDR become 8-bit, transparency is flattened onto white, and EXIF and GPS are not copied. Takes HEVC-coded .heic and .heif.

How this converter works

Your browser reads the photo into memory. A WebAssembly build of libheif decodes its HEVC-compressed image into pixels, the pixels are drawn to a canvas, and the canvas is saved as a JPG at the quality you chose and offered as a download. All of this happens in this tab, and the photo is not uploaded.

To check that it works offline, convert one photo while you are online, so the decoder is downloaded and cached. Then disconnect from the internet and convert another. If that one converts, the conversion did not need a server. The methodology page explains two other ways to check network activity.

Memory use depends on resolution. Measured on this decoder, a 12-megapixel photo uses about 500 MB of memory while it converts and a 48-megapixel photo needs over a gigabyte, which can strain a low-memory phone. Files in a batch are converted one at a time, but all the decoded images in a multi-image file are held until they have been exported, and finished JPGs stay in memory for download until you leave the page. An embedded colour profile is not carried over: a wide-gamut (Display P3) iPhone photo is written as sRGB with its numbers unconverted. Rotation recorded in the file is applied, so photos come out upright. The quality dial applies to every file not yet encoded when it moves; completed outputs are unchanged.

Frequently asked questions

Is my photo uploaded anywhere?
No. The photo is read in your browser, decoded by WebAssembly in this tab and saved as a JPG through a canvas. The network meter counts resource-timing entries from the moment your file is read, so it does not see the earlier decoder and page downloads or any WebSocket traffic. Other checks, and what each of them leaves out, are on the methodology page.
Does the JPG keep the photo's location and other EXIF data?
No. The canvas conversion does not copy the photo’s EXIF fields, including GPS location, device model and capture time. The JPG encoder can add its own format metadata. Note the capture date, or any other original metadata you need, before converting.
Why is the first conversion slower than the rest?
The first conversion has to download the libheif decoder, a WebAssembly file of about 2 MB, before it reads your photo. After that the browser reuses its cached copy, though clearing or updating the cache can mean another download. Decoding time also depends on the photo and your device.
Will converting to JPG lose quality?
Yes. JPG is lossy, so the export adds loss on top of any already in the HEIC. Start at the default quality of 0.92 and check the result; even 1.00, the highest setting, does not reproduce the pixels exactly. The JPG can also be larger than the HEIC. Keep the HEIC original, and avoid re-encoding the same JPG again and again.
My HEIC file produced several JPGs. Why?
A HEIC file can hold more than one top-level still image. The tool converts each supported image its decoder returns and numbers the downloads. A Live Photo is different: its video and motion data are not converted, and the JPGs hold still images only.

Related tools