iKit
Tutorial · 9 min read ·

Convert HEIC to JPG, PNG & WebP in the Browser (2026)

Chrome and Firefox can't open HEIC. Here's how to convert HEIC to JPG, PNG, or WebP entirely in your browser — no upload, no app, EXIF under your control.

Convert HEIC to JPG, PNG & WebP in the Browser (2026)

Convert HEIC to JPG, PNG & WebP in the Browser

You AirDropped a few photos off your iPhone, opened them on a Windows laptop, and got nothing — .HEIC files Chrome flatly refuses to display. The format isn't broken; it's just locked behind a codec most browsers never licensed. The fix doesn't need an app or an upload: you can convert HEIC to JPG, PNG, or WebP right inside a browser tab, with the file staying on your machine the whole time.

TL;DR

  • HEIC is a HEIF container holding HEVC-encoded images; Chrome, Firefox, and Edge can't decode it.
  • Only Safari 17+ (and iOS 17+) renders HEIC in a normal <img> tag.
  • Convert to JPG for compatibility, PNG for lossless/transparency, WebP for small web files.
  • A client-side converter decodes HEIC with libheif compiled to WebAssembly — no server, no upload.
  • Watch the EXIF: HEIC photos often carry GPS coordinates a conversion may or may not strip.

Why HEIC won't open in Chrome or Firefox

If you've never deliberately chosen HEIC, you still have hundreds of them. Since iOS 11 the iPhone has saved photos this way by default, and most people never change the setting.

What HEIC and HEIF actually are

HEIF — the High Efficiency Image File Format — is a container standardised by MPEG as ISO/IEC 23008-12, first published in 2017. The container itself is codec-agnostic, but in practice the images inside are compressed with HEVC (H.265). When the payload is HEVC, Apple uses the .heic extension; that's the only practical difference between "HEIF" and "HEIC" you'll meet day to day.

The appeal is size. Apple switched the iPhone's default capture format to HEIC with iOS 11 and macOS High Sierra in September 2017, on the iPhone 7 and any later A10-Fusion device, and the format routinely lands around half the size of an equivalent JPEG at similar quality. It also carries things JPEG can't: 10-bit colour, depth maps, Live Photo frame sequences, and bursts in a single file.

Which browsers can open HEIC in 2026

Support is still almost entirely an Apple story. Per caniuse, Safari renders HEIC inside a normal <img> from version 17 (macOS Sonoma) onward, and Safari on iOS/iPadOS 17+ does the same. Everywhere else it's a blank box.

Browser HEIC in <img>?
Safari 17+ / iOS 17+ Yes
Chrome (all versions) No
Firefox (all versions) No
Edge / Opera No

Roughly 14% of global browsing happens somewhere HEIC works — which is another way of saying you can't ship a HEIC file to the open web and expect it to load.

Why the patent pools keep HEIC off the web

This isn't laziness from the Chrome team. HEVC, the codec inside HEIC, is encumbered by multiple overlapping patent pools — Via LA (formerly MPEG LA) and Access Advance among them — each charging separate royalties. Any browser that shipped a native HEVC decoder would owe fees to both. Apple already pays via its hardware margins; Google and Mozilla decided not to, and instead poured years into the royalty-free AV1/AVIF ecosystem as a replacement. Mozilla's HEIF bug has sat at low priority with no shipping plan precisely because AVIF gives them comparable compression without the licence.

The upshot for you: HEIC support on the web isn't coming. Converting is the answer, not waiting.

How to convert HEIC to JPG, PNG, or WebP in your browser

The good news is that "the browser can't display HEIC" and "the browser can't decode HEIC" are different claims. JavaScript can decode it even when the <img> tag won't — which is exactly how a client-side converter works.

Step-by-step with iKit Image Format Converter

Using the Image Format Converter:

  1. Drag your .heic files onto the page (or pick a whole folder).
  2. Choose an output format — JPG, PNG, or WebP.
  3. Set a quality level for the lossy formats (90–95 is a safe default).
  4. Download the converted files, or grab them as a ZIP if you converted a batch.

Nothing uploads. The decode and re-encode both happen in the tab, so even a flaky connection or an offline laptop on a plane works fine.

JPG vs PNG vs WebP: which output should you pick

Match the output to what you'll do with the photo:

  • JPG — maximum compatibility. Every app, OS, printer, and upload form accepts it. Best default for sharing photos.
  • PNG — lossless and supports transparency. Choose it for screenshots, graphics, or anything you'll edit further. Files are larger.
  • WebP — smallest for the web at equal quality, supported by every current browser. Best when the destination is a website you control.

If you're unsure which modern format earns its keep, our PNG vs JPG vs WebP vs AVIF guide breaks down the trade-offs.

Batch-converting a folder of iPhone photos

Because the work is local, batching isn't a special feature — it's the same loop run many times. Drop 50 HEICs in, get 50 JPGs out, no per-file upload and no server-side size cap to trip over. If your goal afterward is smaller files for email, pair the conversion with the Image Compressor; if you need them sized for a specific platform, the Image Resizer handles social presets.

How browser-only HEIC conversion works under the hood

For the curious, here's the actual pipeline. It's the reason a "no upload" claim is genuine rather than marketing.

Decoding HEIC with libheif compiled to WebAssembly

The reference decoder for HEIF is libheif, a C/C++ library. Compiled to WebAssembly with Emscripten, it runs at near-native speed inside the browser sandbox. You hand it the raw bytes of the file and it returns decoded pixel data:

// libheif-js (WASM build)
const decoder = new libheif.HeifDecoder();
const buf = await file.arrayBuffer();
const images = decoder.decode(new Uint8Array(buf));
const image = images[0];            // first frame
const w = image.get_width();
const h = image.get_height();

The decoder returns RGBA pixels — at this point HEVC is fully unpacked and the photo is just a bitmap, identical to what any other decoder would produce.

Re-encoding with canvas.toBlob()

Those pixels go onto a <canvas>, and the browser's own encoder writes them back out in the format you asked for. The HTMLCanvasElement.toBlob() method takes a MIME type and an optional quality value:

const canvas = document.createElement('canvas');
canvas.width = w;
canvas.height = h;
const ctx = canvas.getContext('2d');
const imgData = new ImageData(
  new Uint8ClampedArray(image.get_data()), w, h
);
ctx.putImageData(imgData, 0, 0);

// type controls the output format:
canvas.toBlob(blob => download(blob),
  'image/webp', 0.92);   // or image/jpeg, image/png

Pass image/png and the quality argument is ignored — PNG is lossless. Pass image/jpeg or image/webp and 0.92 means roughly 92% quality.

Why nothing leaves your device

Both halves — decode and encode — execute in JavaScript and WebAssembly on your machine. There's no fetch() to a backend, no multipart upload, no temporary file sitting on someone's S3 bucket. You can verify this yourself: open DevTools, watch the Network tab while you convert, and you'll see zero outbound requests for your image. (We wrote a whole piece on how iKit runs entirely in your browser if you want the architecture.)

HEIC gotchas: EXIF, Live Photos, and color

Conversion isn't always a clean one-to-one swap. A few things in a HEIC don't survive the trip to JPG or PNG.

Does converting HEIC strip GPS and EXIF data

HEIC files frequently embed EXIF metadata — including the exact GPS coordinates where the photo was taken, plus timestamps and device info. Re-encoding through a canvas produces a brand-new file from raw pixels, so any metadata that isn't explicitly copied across is dropped. That's usually a privacy win, but check your tool's behaviour if you actually need to keep, say, capture dates. We cover the mechanics in EXIF stripping: why re-encoding drops your photo's location.

This is also the strongest argument for converting locally rather than via an upload site: a HEIC straight off your phone is a small bundle of personal location history, and a "free online converter" that uploads it has a copy.

Live Photos, bursts, and depth maps

A HEIC can hold more than one image — a Live Photo's frame sequence, a burst, or an auxiliary depth map. JPG and PNG are single-image formats, so a conversion keeps the primary still and discards the rest. If a Live Photo matters, export it as a video from the Photos app instead of flattening it.

10-bit color and HDR

HEIC supports 10-bit colour and HDR gain maps. Converting to 8-bit JPG or PNG clamps that down to standard dynamic range. For ordinary photos you won't notice; for an HDR shot destined for an HDR display, you're losing the wide-gamut data in the conversion. WebP also tops out at 8-bit in practice, so if HDR is the point, keep the original.

References

Related on iKit

Related posts