HEIC to JPG
Convert iPhone HEIC photos to standard JPG that opens anywhere
Drop HEIC / HEIF photos here. Drop several to convert as a batch and get a ZIP back.
Max file size: 50MB
How to HEIC to JPG Online
Convert iPhone HEIC and HEIF photos to standard JPG or PNG — handles single files or batches.
- Drop one or more HEIC/HEIF files. Drag multiple at once for batch conversion.
- Pick output format: JPG (smaller, lossy — typical use) or PNG (larger, lossless).
- For JPG, adjust quality 50–100%. 90–95% is the sweet spot for typical phone photos.
- Wait briefly. The first conversion lazy-loads the ~3 MB wasm decoder; subsequent ones are quick.
- Each file gets an individual download link. Batches of 2+ files also produce a single ZIP for one-click download.
About HEIC to JPG
If you have an iPhone newer than the iPhone 7 and you've ever tried to send a photo to a Windows user, you've hit the HEIC wall. Apple's default photo format since iOS 11 — High Efficiency Image File Format (HEIF), with HEIC as the file extension — produces files about half the size of equivalent JPG at the same visual quality. The compression is HEVC video-codec techniques applied to still images, which is genuinely better than JPEG's 1992-era algorithm. Apple was right to switch. The problem is that nothing outside of the Apple ecosystem could read these files for years.
Windows added HEIC support in 2022 (Windows 11 only, behind a paid codec from the Microsoft Store on Windows 10). Android added support in 2020 (newer phones only). Most email clients still can't preview HEIC inline. Most web upload forms reject it. Most photo print services don't accept it. The result: every iPhone user has a folder of photos they can't share without converting them.
This tool is the conversion. Drop a HEIC, get a JPG back. The implementation uses **heic-to**, a maintained WebAssembly port of **libheif** (the standard open-source HEIC decoder). The wasm decoder is around 3 MB compressed and downloads lazily on the first conversion — pages that never use this tool don't pay for it. Once loaded, the decoder lives in memory for the rest of the session, so batch conversion of 10 photos is roughly one decoder load plus 10 quick decodes, not 10× the single-photo cost.
The conversion pipeline is two stages:
1. **HEIC → raw pixels**: libheif's HEVC decoder reads the HEIC container, extracts the primary image frame, and produces a raw RGBA pixel buffer. This stage is lossless — every libheif version produces identical pixels for the same input. 2. **Pixels → JPG (or PNG)**: the browser's native image encoder takes the pixel buffer and produces a JPG at the specified quality, or a PNG at lossless. JPG is the standard pick (universal compatibility, small files); PNG is the right call when you need to edit the result further without compounding compression losses.
The JPG quality slider is the lever you'd expect: 100% is closest to lossless (but JPEG can never be truly lossless), 50% is "noticeably degraded but acceptable for thumbnails," 90–95% is the sweet spot most cameras and editing apps default to. The output is rarely smaller than the source HEIC at the same visual quality because HEVC is more efficient than JPEG; that's the tradeoff for portability.
**Batch mode** is the workflow that actually matters in practice. Most iPhone users don't have one HEIC to convert — they have a folder full of them after a trip. Drop them all at once and the tool processes serially (one at a time to avoid memory spikes for large 12MP photos), then bundles the JPGs into a single ZIP via JSZip. The individual files remain individually downloadable too, in case you want one specific photo and not the bundle.
A few realities worth knowing.
**Metadata gets dropped.** heic-to's re-encode pipeline doesn't carry EXIF / IPTC through. The output JPG has no camera info, no GPS coordinates, no capture timestamp. For most users this is a feature — it's the same privacy win as the EXIF Stripper tool. If you specifically need the EXIF preserved through the conversion, this is the wrong tool; use the iPhone's built-in "Most Compatible" export setting (Settings → Photos → Transfer to Mac or PC → Automatic) or a desktop tool that preserves metadata.
**Live Photos lose the video portion.** An iPhone Live Photo is two files — a HEIC still and a small QuickTime MOV. This tool converts the still only; the video is separate. If you want the motion preserved, export the Live Photo as a video from the iPhone's Photos app directly.
**HEIC depth maps are dropped.** Portrait Mode photos contain a depth channel that subject-selection tools use. The conversion produces a flat 2D JPG; the depth information is gone. This isn't a heic-to limitation — it's a JPG limitation. JPG simply has no representation for depth data.
Everything runs in your browser. The wasm decoder is fetched once from your origin and cached for the session; conversions produce zero outgoing network requests after that. Your photos — including any sensitive metadata that survives the conversion or any contents you'd not want a third party to see — stay in your tab. Confirm in DevTools: only one fetch of the wasm bundle, nothing else.
Related Tools
Frequently Asked Questions
Why does my iPhone shoot HEIC instead of JPG?
Apple switched the default in iOS 11 (2017) because **HEIC files are about half the size of JPG at the same visual quality**. The format (technically HEIF — High Efficiency Image File Format) uses HEVC video-codec techniques applied to still images, which compresses far better than the 1992-era JPEG algorithm. The catch is that not everything supports HEIC: Windows didn't add support until 2022, Android only since 2020, many email clients still can't display them, most web image hosts don't accept them, and most photo printers can't read them. JPG remains the universally-readable format.
How does the conversion work?
The tool uses **heic-to**, which bundles a WebAssembly port of libheif (the standard open-source HEIC decoder). The decoder runs entirely in your browser — no server upload. It decodes the HEIC into raw pixel data, then re-encodes that data as JPG via the browser's built-in JPEG encoder. The first conversion is slow (~3 seconds) because the ~3 MB wasm decoder has to download and initialize; subsequent conversions in the same session are fast (under a second per typical photo).
Is there any quality loss?
The HEIC→pixels stage is lossless — every HEIC decoder produces the same pixels for the same input. The pixels→JPG stage is lossy by definition (JPEG is a lossy codec), with the JPG quality slider controlling how much. At 92% (the default), the visible quality is indistinguishable from the original for typical phone photos; the resulting JPG is usually slightly larger than the source HEIC because JPEG is less efficient than HEVC. If you need lossless output, switch to PNG — but expect 5–10× the file size.
Can I convert multiple files at once?
Yes. Drop multiple HEIC/HEIF files and the tool processes them in sequence (one at a time to avoid memory spikes), then bundles the JPGs into a downloadable ZIP. Each individual file is also downloadable separately. The wasm decoder loads once per session, so a 10-file batch isn't 10× slower than one file — it's roughly one decoder load plus 10 quick decodes.
Does the EXIF metadata survive?
No — heic-to uses a re-encode pipeline that doesn't carry metadata through. The output JPG has no EXIF, no GPS, no camera info. This is actually a privacy win for most users; if you specifically need the EXIF preserved, run the original HEIC through the EXIF Viewer tool first to read the values, then add them back via `exiftool` at the command line. (Or use a different converter — most desktop tools preserve metadata by default.)
What about HEIF live photos / Live Photos with audio?
iPhone Live Photos are pairs of files: a HEIC still and a small QuickTime video. This tool converts the HEIC still only; the video is a separate file you'd export separately from the Photos app. If a single HEIC file contains multiple frames (some Apple ProRAW captures), heic-to extracts the primary frame.
Is the file sent to a server?
No. The wasm decoder runs entirely in your browser. The HEIC file is decoded locally and the JPG output is generated client-side. The only network requests are loading the page and the ~3 MB wasm chunk (cached after first load). Verify in DevTools — once the wasm has loaded, conversions produce zero outgoing requests.