Skip to content

How to Convert HEIC to JPG

This page explains what the converter actually does: which files it accepts, how a HEIC becomes a JPG, and why the work stays in your browser.

What a HEIC file is

HEIC is a filename people use for photos stored in the HEIF container and compressed with HEVC, also called H.265. Apple adopted it so an iPhone can keep more photos in the same amount of storage. HEIF is the broader container name. A file ending in .heif can hold the same kind of image, which is why this tool accepts both extensions.

The container can also hold other codecs. This site’s decoder is the WebAssembly build of libheif with HEVC decoding. If a file uses a codec that build does not include, conversion stops with an error for that file instead of pretending the JPG was created.

HEIC compared with JPG

Differences between HEIC and JPG
HEIC / HEIFJPG
Typical compressionHEVC inside a HEIF containerJPEG
Where it opens Current Apple devices, and other systems that have a HEIF codec Windows, browsers, email, and most websites
TransparencyCan store an alpha channelNo alpha. This tool fills transparent pixels with white
QualityCamera files are usually already lossyLossy. You choose 0.95, 0.90, 0.85, or 0.70

What happens after you add a file

  1. The page checks the extension and the 25 MB limit before it reads the image.
  2. It reads the file header and confirms the HEIF ftyp box. A renamed JPEG or an AVIF file stops here.
  3. The decoder loads in a background worker the first time you convert. That download is the converter code, not your photo.
  4. libheif decodes the primary image, including rotation stored in the file, into pixels.
  5. Transparent pixels are composited onto white, then a canvas encodes a JPEG at the quality you selected.
  6. You get a preview and a real image/jpeg file ending in .jpg. The original HEIC is not renamed and re-downloaded.

Why local processing is safer

A server-side converter has to receive the photo. This one does not. The image bytes stay in the tab’s memory long enough to decode, encode, and download. They are not written to localStorage or IndexedDB, and they are not sent to an analytics tool. When you delete a row, clear the list, or close the tab, the temporary object URLs are released.

The static host that serves the HTML, JavaScript, and WebAssembly can still see ordinary request logs, such as an IP address and the page URL. Those requests do not contain the picture. See the privacy policy for the exact claims this site makes.

Browsers and devices

Conversion needs JavaScript and WebAssembly. Current desktop Chrome, Edge, Firefox, and Safari are the intended targets, including mobile Safari and Chrome on Android. The page was exercised in Chromium. Older browsers that cannot run WebAssembly show an error instead of a silent failure. Two images are converted at a time so a batch is less likely to run out of memory. Very large images, above 48 megapixels or 12,000 pixels on a side, are refused.

Why a file fails

  • The extension is not .heic or .heif.
  • The file is empty, or larger than 25 MB.
  • The bytes are not a HEIF container. Changing the extension of a JPG does not make it HEIC.
  • The file is AVIF. This tool does not convert AVIF.
  • The HEIF codec is not in the libheif WebAssembly build used here, or the file is damaged.
  • The decoded image would be too large to hold safely in the tab.

A failed file does not stop the rest of the batch. Use Retry on that row, or delete it. If it still fails, export a JPG from the phone or camera that created it.