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
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:
- Drag your
.heicfiles onto the page (or pick a whole folder). - Choose an output format — JPG, PNG, or WebP.
- Set a quality level for the lossy formats (90–95 is a safe default).
- 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
- HEIF/HEIC image format — Can I use — current 2026 browser support data; Safari 17+ only.
- High Efficiency Image File Format — Wikipedia — ISO/IEC 23008-12 container definition and HEVC payload details.
- High Efficiency Image File (HEIF) Format, MPEG-H Part 12 — Library of Congress — format/standard provenance and 2017 publication.
- libheif-js — npm — WebAssembly build of libheif used for in-browser decoding.
- HTMLCanvasElement: toBlob() — MDN — canvas re-encoding API, MIME types, and quality argument.
Related on iKit
- PNG vs JPG vs WebP vs AVIF: which format to actually use — pick the right output before you convert a folder of HEICs.
- Convert images to AVIF — and when AVIF beats WebP — AVIF is the royalty-free format browsers chose over HEIC; here's when to target it.
- How to convert JPG to PNG (and when you shouldn't) — the same decode-and-re-encode logic, lossy-to-lossless edition.
- Convert PNG to WebP and cut image size by 30% — for HEIC-to-web workflows where WebP is the destination.
- Batch convert 50 images at once — browser-only, no upload — how the local conversion loop scales to whole camera rolls.
- EXIF stripping: why re-encoding drops your photo's location — what happens to GPS and timestamps when you convert a HEIC.
Related posts
Serve AVIF, WebP & JPG With One <picture> Tag (2026)
Use one <picture> tag to serve AVIF, WebP, and JPG so every browser gets the smallest image it can decode. Syntax, fallback order, and the mistakes to avoid in 2026.
How to Match a URL with Regex: 3 Edge Cases (2026)
How to match a URL with regex and survive the three edge cases that break most patterns: trailing punctuation, balanced parentheses, and scheme-less links.
How to Batch Convert 50 Images at Once in 2026 (No Upload)
Batch convert 50 images to WebP, AVIF, JPG, or PNG at once, entirely in your browser — no upload, no sign-up, and your files never leave your device.