DEV Community

Sky Lu
Sky Lu

Posted on

Why your iPhone .heic photos won't open on Windows or Linux — and how to convert them anywhere

Someone AirDrops you a photo, or you pull a few off your iPhone, and you get a file ending in .heic. Double-click it on Windows and you get a shrug. Drop it into a web app and half of them choke. Linux often just shows a broken thumbnail.

I've built a pile of free file tools over at bestaifinds.com (disclosure up front — more on that at the end), and "my HEIC won't open" is one of the most common real problems people show up with. So here's the honest version: what HEIC actually is, why it's still awkward in 2026, and how to convert it on whatever machine you happen to be sitting at.

What a .heic file actually is

HEIC stands for High Efficiency Image Container. It's a specific use of HEIF (High Efficiency Image Format), and the important part is what's inside the box: the image data is encoded with HEVC — also known as H.265, the same codec used for a lot of video.

That's the whole trick. Apple took a modern video codec and used a single frame of it to store a still photo. A .heic file is essentially "one HEVC keyframe (or a few), plus metadata, depth maps, Live Photo bits, and sometimes multiple images, wrapped in an ISO base media container" — the same container family as MP4.

Why bother? Compression. HEVC is meaningfully more efficient than the decades-old JPEG. In practice an HEIC photo is often roughly half the size of the equivalent JPEG at similar quality, and it can store things JPEG can't: 10-bit color, transparency, multiple images per file, depth data. On a phone where you're shooting thousands of photos, halving storage is a big deal. That's why Apple made it the default capture format.

So HEIC is genuinely good technology. The problem isn't the format. The problem is who's allowed to decode it.

Why it still won't open in 2026

People assume HEIC won't open because it's "new" or "Apple-proprietary" or because some app is lazy. The real reason is more boring and more structural: HEVC is covered by patents, and decoding it requires a license.

Because the pixels inside a .heic are HEVC, anything that opens it has to ship an HEVC decoder, and HEVC's patent licensing is famously tangled — multiple patent pools, many rights holders. That cost and complexity is why HEVC support is not baked into every OS and browser by default the way JPEG and PNG are. JPEG and PNG are royalty-free; HEVC is not. macOS opens HEIC because Apple ships and pays for the codec; Windows, Linux, and every mainstream browser don't decode it out of the box, which is exactly what the three fixes below work around.

I'm being deliberately non-specific about exact fees and dates because the licensing landscape shifts and I don't want to feed you a made-up number. The accurate, durable statement is: it's a codec-licensing problem, not a "nobody got around to it" problem.

Fix 1: Use what the OS can do

macOS — nothing to do. It opens HEIC in Preview, Quick Look, Photos. To get a JPEG, open it in Preview and File → Export, or use the built-in sips:

sips -s format jpeg input.heic --out output.jpg
Enter fullscreen mode Exit fullscreen mode

Windows — install the codec, then File Explorer, Photos, and Paint can handle HEIC. You need the HEVC Video Extensions from the Microsoft Store. There's a paid listing and a separate "HEVC Video Extensions from Device Manufacturer" listing that's sometimes available, sometimes free depending on your hardware and region — check the Store and see what shows up for you. There's also a separate HEIF Image Extensions package. Once HEVC is installed, double-clicking .heic usually just works, and you can "Save as" a JPEG from Photos.

Linux — your file manager almost certainly can't do it until you install a HEIF library. The standard one is libheif, which brings a heif-convert command (see below).

Fix 2: One CLI line that works everywhere

If you're comfortable in a terminal, this is the fastest and most private route — the file never leaves your machine.

libheif (heif-convert):

# macOS
brew install libheif
# Debian/Ubuntu (heif-convert ships here on recent releases)
sudo apt install libheif-examples   # or libheif-tools, distro-dependent

heif-convert input.heic output.jpg
Enter fullscreen mode Exit fullscreen mode

ImageMagick — on modern builds it delegates HEIC decoding to libheif under the hood, so you still need libheif installed, but the command is the one many people already know:

magick input.heic output.jpg
Enter fullscreen mode Exit fullscreen mode

Batch a whole folder:

# bash, convert every .heic in the current dir
for f in *.heic; do magick "$f" "${f%.heic}.jpg"; done
Enter fullscreen mode Exit fullscreen mode

Quick sanity check that your ImageMagick can actually see the HEIC delegate:

magick -list format | grep -i heic
Enter fullscreen mode Exit fullscreen mode

If that prints nothing, your build wasn't compiled with HEIF support — install/reinstall it with libheif present.

Fix 3: When you can't install anything

Locked-down work laptop, a Chromebook, a phone, someone else's machine — sometimes installing libheif or a Store extension simply isn't an option. That's when a browser converter is the pragmatic move. I built one at bestaifinds.com/image/heic-to-jpg.

But here's where I have to be straight with you, because it's the technically interesting part.

The honest engineering note: HEIC is the one I can't do in your browser

Most of my image tools run 100% in your browser — the file never gets uploaded. Image compress/resize/format-convert use the Canvas API; PDF merge/split run on pdf-lib and pdf.js; background removal, OCR, and upscaling run as WASM/WebGL models that download once and then execute locally. The data flow is File API → in-memory ArrayBuffer → WASM/Canvas/WebGL → download as a blob URL. Nothing is POSTed. I'm genuinely proud of that and I default to it wherever I can. (If you want to verify the no-upload claim on any tool — mine or anyone's — I wrote up the 60-second DevTools/Network-tab check in a separate post; this one assumes you already know the difference and focuses on why HEIC is the exception.)

HEIC is that exception, and I want to say so plainly. A browser cannot natively decode HEIC — same root cause as everything above, no built-in HEVC decoder. The Canvas trick I use for JPEG/PNG/WebP doesn't apply, because the browser can't get the pixels out of the file in the first place. You can ship a WASM build of libheif to the client, but a full HEVC decoder is heavy to download and slow to run for a quick "convert this and go" tool — it's the wrong trade-off for most people on most connections.

So the HEIC converter runs server-side: the file is decoded with a real libheif/ImageMagick binary on the server, you get your JPEG back, and the uploaded file is deleted after. I'd rather tell you that than pretend a client-side badge applies when it doesn't. If a tool claims "100% in-browser HEIC conversion," be a little skeptical — under the hood it's either shipping a hefty WASM decoder or quietly uploading. (Video is the same story: ffmpeg.wasm exists but is too heavy for a snappy web tool, so video runs server-side too, deleted after.)

TL;DR

  • .heic is HEVC video frames in a container — that's why it's small and why it's awkward.
  • It won't open on Windows/Linux/browsers by default because of HEVC patent licensing, not laziness.
  • Native or CLI: macOS sips, or heif-convert in.heic out.jpg / magick in.heic out.jpg once libheif is installed.
  • Can't install? A browser converter works, but HEIC decode is genuinely server-side — there's no client-only way around the missing decoder.

Disclosure: I'm Sky Lu, and I build bestaifinds.com — 240+ free, no-signup file tools. The HEIC converter mentioned above is /image/heic-to-jpg, and yes, it's one of the few that runs server-side, for exactly the reasons above. Most of the rest run entirely in your browser.

What's the file format that's bitten you the most — HEIC, RAW, HEVC video, something weirder? I'm always looking for the next genuinely-annoying conversion to tackle, so tell me what you'd want next.

Top comments (0)