Blog Why Your iPhone Photos Won't Open on a PC

Why Your iPhone Photos Won't Open on a PC

2026-08-13 · 6 min read HEIC Images

You copy photos off your iPhone and find files ending in .HEIC that refuse to open. Attach one to an email and the recipient can't view it. Try uploading one to a website and the file picker won't even offer it. The usual reaction is that Apple has done something perverse again. The story is a bit different.

HEIC is genuinely a good format

HEIC is two things stacked. The outer container is HEIF; the codec compressing the pixels inside is HEVC, also known as H.265. HEVC was designed for 4K video, but a technique that compresses one video frame well works just as nicely on a single photograph.

The result speaks for itself: at a quality difference most people can't see, files come out at roughly half the size of JPEG. That means twice as many photos on a 128GB phone. It's why Apple switched to it as the default back in iOS 11, in 2017.

Size isn't the whole story. JPEG stores 8 bits per colour channel; HEIC can carry 10, so gradients in a sky band far less. It supports transparency, and it can hold several images in one file, which is where Live Photos and depth maps live. None of that is possible in a format designed in 1992.

So why can nothing open it?

Not because it's technically hard. Because HEVC carries patent royalties.

JPEG's relevant patents expired long ago, so anyone can implement it freely. HEVC is a thicket of patents held by many companies, and the licensing pools never even consolidated into one. Shipping a decoder means negotiating with several rights holders separately.

For a browser that's an impossible position. Chrome and Firefox are distributed free to the entire world; owing royalties in proportion to your user count doesn't add up. Nor does it sit comfortably with open-source distribution. So they declined to support it — a licensing decision, not a technical one.

SafariOpens fine. Apple already pays for the codec licence at the operating-system level
Chrome / FirefoxWon't open it. No decoder shipped, because of the licensing burden
WindowsNot out of the box. You have to install a codec extension from the Store separately
Website uploadsThe receiving server has to understand HEIC, and most accept only JPEG and PNG

In short: Apple paid to solve the problem inside its own ecosystem, but the moment a photo leaves that ecosystem it meets a world that didn't pay. To the person holding the phone, it just looks like iPhone photos being broken.

Opening it in a browser anyway

If Chrome doesn't know HEIC, you can bring the decoder with you. A HEIF decoder written in C, compiled to WebAssembly, runs inside the browser. The browser needn't know the codec as long as the page carries one along.

That decoder is about 1MB even compressed, though, and making every visitor download it up front is wasteful — nine out of ten will just look at the page and leave. So the order goes like this.

Step 1Ask the browser to decode it natively. On Safari this succeeds and no decoder is ever downloaded
Step 2Only on failure does the decoder get fetched — at the moment a file is dropped in, not when the page opens
Step 3Once fetched it's cached by the browser, so later conversions start instantly

The photo itself goes nowhere. Decoding and re-encoding to JPEG both finish inside the browser, which means portraits and photographed documents never have to sit on someone else's server.

Licensing was our problem too

The decoder we use, libheif, is LGPL-3.0. That's weaker than GPL, but it comes with a condition: users must be able to swap the library for a version they built themselves.

Running a bundler naively breaks that. Once library code is minified together with application code into one file, there is no way to pick out libheif and replace it. So this one file stays out of the bundle: kept verbatim at a separate path and loaded at runtime, never minified, never renamed.

To stop it drifting back in by accident there's a post-build check as well — if any of libheif's internal function names appear inside an application chunk, that counts as a failure. Licence compliance turns out to be less a thing you do once than a thing you keep verifying.

Why not just shoot JPEG?

You can. On an iPhone, Settings → Camera → Formats → "Most Compatible" switches to JPEG from then on. If you send most of your photos to other people soon after taking them, this is the quieter life.

The cost is roughly double the storage. Which trade-off suits you depends on your habits. Leaving it on HEIC and converting only when you need to share is usually the least lossy compromise between space and compatibility.

Need to convert the HEIC files you already have?

To JPG, PNG or WebP — on your device, with no upload.

HEIC to JPG