{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreie4movv2bzxsr6h65xn2jdloqm23f2lphuk6cmggcozlkhb6q4pem",
"uri": "at://did:plc:25rdn5elo5izoxrmtis34zuk/app.bsky.feed.post/3mph2ndm5idb2"
},
"coverImage": {
"$type": "blob",
"ref": {
"$link": "bafkreicbuphk7k3yn4m2l6rb2hqvvcvxc5zgyqrivg52vjajihoqmtbave"
},
"mimeType": "image/webp",
"size": 80486
},
"path": "/skylu/why-your-iphone-heic-photos-wont-open-on-windows-or-linux-and-how-to-convert-them-anywhere-22b",
"publishedAt": "2026-06-29T17:22:33.000Z",
"site": "https://dev.to",
"tags": [
"webdev",
"tutorial",
"privacy",
"opensource",
"bestaifinds.com",
"bestaifinds.com/image/heic-to-jpg",
"/image/heic-to-jpg"
],
"textContent": "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.\n\nI'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.\n\n## What a .heic file actually is\n\nHEIC 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.\n\nThat'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.\n\nWhy 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.\n\nSo HEIC is genuinely good technology. The problem isn't the format. The problem is who's allowed to decode it.\n\n## Why it still won't open in 2026\n\nPeople 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.**\n\nBecause 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.\n\nI'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.**\n\n## Fix 1: Use what the OS can do\n\n**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`:\n\n\n sips -s format jpeg input.heic --out output.jpg\n\n\n**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.\n\n**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).\n\n## Fix 2: One CLI line that works everywhere\n\nIf you're comfortable in a terminal, this is the fastest and most private route — the file never leaves your machine.\n\n**libheif** (`heif-convert`):\n\n\n # macOS\n brew install libheif\n # Debian/Ubuntu (heif-convert ships here on recent releases)\n sudo apt install libheif-examples # or libheif-tools, distro-dependent\n\n heif-convert input.heic output.jpg\n\n\n**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:\n\n\n magick input.heic output.jpg\n\n\nBatch a whole folder:\n\n\n # bash, convert every .heic in the current dir\n for f in *.heic; do magick \"$f\" \"${f%.heic}.jpg\"; done\n\n\nQuick sanity check that your ImageMagick can actually see the HEIC delegate:\n\n\n magick -list format | grep -i heic\n\n\nIf that prints nothing, your build wasn't compiled with HEIF support — install/reinstall it with libheif present.\n\n## Fix 3: When you can't install anything\n\nLocked-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.\n\nBut here's where I have to be straight with you, because it's the technically interesting part.\n\n## The honest engineering note: HEIC is the one I _can't_ do in your browser\n\nMost 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_.)\n\nHEIC 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.\n\nSo 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.)\n\n## TL;DR\n\n * `.heic` is **HEVC video frames in a container** — that's why it's small and why it's awkward.\n * It won't open on Windows/Linux/browsers by default because of **HEVC patent licensing** , not laziness.\n * Native or CLI: macOS `sips`, or `heif-convert in.heic out.jpg` / `magick in.heic out.jpg` once libheif is installed.\n * Can't install? A browser converter works, but HEIC decode is genuinely **server-side** — there's no client-only way around the missing decoder.\n\n\n\n_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._\n\nWhat'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.",
"title": "Why your iPhone .heic photos won't open on Windows or Linux — and how to convert them anywhere"
}