HEIC explained: why iPhone photos will not open on Windows, and how to convert them
You copied a folder of photos from an iPhone to a Windows PC and every one is an IMG_1234.HEICthat Photos refuses to open, or a visa portal or a WordPress media library answered “file type not permitted”. By the end you will know what a HEIC file is, why so much software cannot read it, how to check what you are really holding, which two iPhone settings stop the problem at source, and how to convert a whole folder to JPG in your browser.
What a HEIC file actually is
HEIF (High Efficiency Image File Format, ISO/IEC 23008-12) is a container, not a codec: the same box structure as MP4 and MOV — the ISO Base Media File Format — holding one or more “items”. A .heic file is a HEIF whose items are compressed with HEVC (H.265), the video codec. Open one in a hex viewer and bytes 4 to 11 spell it out: ftyp followed by the brand heic. A JPEG always starts with the three bytes FF D8 FF. That difference is the whole reason renaming never works.
Apple switched with iOS 11 in September 2017, on the iPhone 7 and later — the A10 chip was the first with a hardware HEVC encoder — promising roughly half the file size of JPEG at similar quality. The container is the bigger change: one HEIC can carry the main image, a thumbnail, an alpha plane, a depth map and portrait matte, a burst as an image sequence, an HDR gain map on recent models, and EXIF and XMP as separate items. HEVC also allows 10-bit colour and wide-gamut profiles (iPhones tag photos as Display P3). JPEG is 8-bit, single-image, no alpha.
A Live Photo is not one file: it is a HEIC still plus a separate three-second .MOV, paired by a content identifier stored in both. Convert the HEIC and you get the still; the video is a separate job (see MOV to MP4 for iPhone videos).
Why it will not open on Windows, Android or in a web form
HEVC is patent-licensed through several pools, and anyone shipping a decoder is expected to pay. Apple pays and bundles it. Microsoft split the problem in two: the HEIF Image Extensions are a free Store download, but the HEVC Video Extensionsthat actually decode the pixels are a paid add-on unless your PC maker pre-installed the “from Device Manufacturer” edition. Without both, Explorer shows a blank thumbnail and the Photos app replies “It looks like we don’t support this file format.”
Browsers went the other way: Chrome, Edge and Firefox do not decode HEIC at all, so <img src="photo.heic"> is a broken image everywhere except Safari 17 and later on Apple hardware — which is why the tools on this site ship their own decoder. Android 9 (2018) added HEIF decoding, but only on phones with a hardware HEVC decoder.
Web forms fail at two layers. The picker: <input type="file" accept=".jpg,.jpeg,.png"> greys out anything else. The server: allowlists that check the extension or the MIME type image/heic, and image libraries — PHP’s GD, Pillow without pillow-heif, ImageMagick built without libheif — that cannot decode what got through. Preview and Photos on macOS 10.13 and later, Google Photos, Lightroom and libheif-enabled GIMP open it without fuss.
How to tell what you are dealing with
The extension is a hint; the brand string at byte 8 is the fact. On macOS or Linux:
$ xxd -l 24 IMG_1234.HEIC
00000000: 0000 0018 6674 7970 6865 6963 0000 0000 ....ftypheic....
00000010: 6d69 6631 6865 6963 mif1heic
$ file IMG_1234.HEIC
IMG_1234.HEIC: ISO Media, HEIF Image HEVC Main or Main Still Picture ProfileOn Windows, PowerShell does the same job:
PS> Format-Hex -Path .\IMG_1234.HEIC -Count 16Then match the brand against this list — several extensions share the container, and one lookalike does not.
| Extension | Brand at byte 8 | Codec inside | Who produces it |
|---|---|---|---|
.HEIC | heic / heix | HEVC still image | iPhone, iPad, Samsung Galaxy (HEIF option) |
.HEIF | mif1 | Usually HEVC; the brand is codec-neutral | Android phones, some conversion tools |
.HIF | Varies by maker | HEVC, usually 10-bit | Canon, Sony and Fujifilm cameras |
.AVIF | avif | AV1 — a different codec in the same container | Web tools, Chrome downloads |
A file starting ffd8 ffe1 is a JPEG with an EXIF block, whatever its name. One starting 0000 00.. 6674 7970 but called .jpg has been renamed; libjpeg on the server logs Not a JPEG file: starts with 0x00 0x00.
Stop your iPhone producing HEIC
Shoot JPEG from now on
Settings → Camera → Formats → Most Compatible. New photos are saved as JPEG and new videos as H.264; the existing library is untouched. The costs: files roughly double in size, no 10-bit colour, and because video drops HEVC too, the Camera app loses the modes that need it — iOS notes on the same screen that 4K at 60 fps, 1080p at 240 fps and HDR video require High Efficiency.
Convert on the way out instead
Settings → Photos → Transfer to Mac or PC → Automatic. Keep shooting HEIC; when you copy over a USB cable — Explorer on Windows, Image Capture on a Mac — iOS converts each photo to JPEG (and each HEVC video to H.264) on the way. Keep Originalssends the HEIC untouched. The converted JPEG keeps the EXIF block including GPS, but the depth map and burst frames are gone. One caution: long Automatic imports sometimes stop with “A device attached to the system is not functioning”; if so, switch to Keep Originals and convert on the PC.
Converting HEIC to JPG in the browser
Because no Windows browser decodes HEIC natively, the HEIC to JPG converteron this site ships libheif compiled to WebAssembly. When we built it we had to run that decoder in a hidden same-origin frame, because it constructs functions from strings, which the site’s Content-Security-Policy forbids on normal pages; the photo bytes go in, a PNG comes back, and nothing touches the network. Drop a single .heic or .heif and it opens in an editor whose save dialog has a Format selector (JPG by default), a Quality slider from 1 to 100% for JPG and WebP, a Max file size (KB, optional) field, a Compress image tick and a Resize box. The page waits up to 120 seconds per file for the decoder before giving up.
Select several files and you get a different screen: Convert all to JPG (ZIP) or Edit each image. The batch path skips the editor: each photo is decoded, drawn onto a canvas with transparency flattened to white, and encoded as JPEG at quality 0.92; the results land in converted-jpg.zip under their original names, so IMG_1234.HEIC becomes IMG_1234.jpg. Failures are listed afterwards as “Could not convert: …” and the rest still download. Two options sit above the buttons:
- Compress images — encodes at quality 0.72 and caps the long edge at 2560 px. A 4032 × 3024 iPhone still becomes 2560 × 1920, plenty for screens and email.
- Max size per image (KB) — a hard byte cap. The tool searches JPEG qualities between 0.05 and 0.97 for the highest that fits, shrinking the dimensions in 25% steps if even the lowest is too big. It pre-shrinks to roughly 12 pixels per byte of budget first, so a 500 KB cap on a 12-megapixel photo starts from about 2860 × 2150; the result is guaranteed under the cap or reported as failed.
One resolution detail: the single-file editor downscales anything longer than 4096 px on its long edge (“Large image resized to … so it can be edited and saved on this device”), so a 48 MP capture at 8064 × 6048 keeps its full size only through the batch path.
For a mixed folder — HEIC, PNG screenshots, a WebP someone sent — the general convert to JPG tooluses the identical decode path and also reads PNG, WebP, AVIF, TIFF, PSD, BMP, GIF and SVG. If a form’s size limit is the only reason you are converting, drop the HEIC onto the compress image tool: it accepts HEIC, always saves JPG, arrives with the Compress tick on (0.72, 2560 px) and lets you type a byte cap instead. Several files there open in turn in the editor and download together as edited-images.zip; closing without saving skips one.
JPEG has nowhere to put the depth map, portrait matte, burst frames after the first, the HDR gain map or the Live Photo link, so every converter drops them.
HEIC vs JPG vs WebP vs AVIF
For archiving rather than one stubborn form, the target is a real decision. JPG is the only format that opens everywhere; the other three are smaller, by the rough figures each format’s authors publish.
| Format | Size vs JPG | Bit depth / alpha | Browser support | Editing support |
|---|---|---|---|---|
| HEIC | About half | 8- or 10-bit, alpha, HDR, depth | Safari 17+ only | Apple apps; Windows apps need the OS codec |
| JPG | Baseline | 8-bit, no alpha | Every browser since the 1990s | Everything |
| WebP | 25–35% smaller | 8-bit, alpha | All current browsers (Safari from 14) | Most current editors; older ones no |
| AVIF | About half | 10/12-bit, alpha, HDR | Chrome 85+, Firefox 93+, Safari 16+ | Patchy |
Rule of thumb: keep the HEIC originals as the master, convert to JPG for anything uploaded or handed to a stranger, and use WebP or AVIF only on a website you control. See the image formats guide and the compression guide.
Metadata and privacy after conversion
An iPhone HEIC carries a full EXIF block — camera, lens, exposure, timestamp, GPS to a few metres — plus XMP and Apple maker notes. Whether that survives depends on the converter. Apple’s Automatic transfer, Preview, Photos and ImageMagick all copy EXIF into the JPEG. The converters on this site do not: they rebuild the JPG from decoded pixels through a browser canvas, so the output has no EXIF, no GPS and no embedded colour profile (Display P3 is mapped to sRGB).
For JPGs that reached you by any other route, run them through the remove metadata toolfirst. It lists what each file carries — GPS location, camera, date, editing software — or reports “No metadata found”. JPEGs are cleaned losslessly: the APP1–APP15 and COM segments (EXIF, XMP, IPTC, comments) are dropped and the compressed image data copied byte for byte; PNG and WebP are re-encoded through a canvas instead. It has no HEIC decoder — in Chrome, Edge and Firefox a .heic ends in “Could not process: …” — so convert first, clean second. Several files download as cleaned-images.zip. The photo metadata guide covers what else a photo reveals.
Troubleshooting
“File not supported” after renaming .heic to .jpg
Renaming changes the label, not the contents. Windows Photos reads the first bytes and still reports the format as unsupported; a browser shows a broken image; an upload script that accepted the extension fails at decode with Not a JPEG file: starts with 0x00 0x00. Rename it back and convert properly.
Grey or blank thumbnails in Windows Explorer
Explorer needs both Store extensions, HEIF and HEVC, to draw a thumbnail. If both are installed and thumbnails stay blank, the cache is stale: Disk Clean-up → Thumbnails.
“Could not read this HEIC photo. The file may be corrupted or use an unsupported HEIC variant.”
The converter shows this one message for every decode failure; the cause is printed in the browser console (F12 → Console) after HEIC decode failed:. Usual cases: the copy was interrupted and the file is truncated (compare its size with the original), or it uses an HEVC profile the bundled decoder does not handle, most likely a 10-bit .HIF from a Canon or Sony body — a desktop tool with a fuller libheif build is the fallback. Two console lines mean something else: The HEIC engine did not load — reload the page and try again. means the decoder frame never answered within 15 seconds (a script-stripping content blocker, or going offline before the first HEIC was ever dropped — it is fetched on first use, then cached), and The engine got stuck on this file — it may be malformed. is the 120-second watchdog; other files in the batch still convert.
A .HIF file is rejected as unreadable, not as HEIC
The converter picks the HEIC decoder by extension or MIME type, and .hifis on neither list, so the file is tried as an ordinary image and fails with “Could not read this image”. Rename IMG_0001.HIF to IMG_0001.heic — same container, so the rename is honest — and drag it onto the page, since the picker may grey it out.
“Batch conversion failed. Try converting fewer images at once.”
A decoded 12-megapixel image is about 48 MB of raw pixels (4032 × 3024 × 4 bytes), and the decoder, canvas and ZIP builder each hold buffers. On a phone or low-memory laptop a few hundred photos at once can exceed what the tab is allowed; convert in batches of 50 or so.
HEIC from a Samsung or other Android phone
Galaxy phones from the S10 onwards save HEIF when the camera’s HEIF pictures option is on. Same container, same codec, usually the .heic extension; they convert exactly like iPhone files. The visible difference is the brand string mif1 instead of heic.
Do this
- Check the bytes, not the name:
ftypheicat offset 4 is HEIC,FF D8 FFis JPEG. Never rename one to the other. - If photos regularly go to a Windows PC, set Settings → Photos → Transfer to Mac or PC → Automatic and keep shooting HEIC.
- Switch to Settings → Camera → Formats → Most Compatible only if you can live without 4K/60 and 240 fps video.
- Convert a folder in one go with the HEIC to JPG tool; tick Compress or set a KB cap when a form has a size limit.
- Keep the HEIC originals — the JPG loses depth, bursts and the gain map, and this site’s converter drops EXIF too.
- Strip metadata from JPGs that came from any other converter before posting them.
Frequently asked questions
Can I just rename a .heic file to .jpg?
No. The extension is a label; the bytes inside are still an HEVC-coded HEIF container, so Windows Photos, browsers and upload scripts reject it as soon as they read the first bytes. A real conversion has to decode the HEVC image and re-encode it as JPEG.
Does converting HEIC to JPG lose quality?
A little, because JPEG is a second lossy encode of an already lossy image. At quality 0.92 the difference is not visible at normal viewing sizes. What you lose outright is anything JPEG cannot hold: depth maps, the Live Photo video, extra burst frames and HDR gain-map data.
Why does Windows 11 still not open HEIC photos?
Viewing HEIC needs two Microsoft Store components: the free HEIF Image Extensions and the HEVC Video Extensions, which are paid unless your PC maker pre-installed the manufacturer edition. Until both are present, Photos shows a blank thumbnail and reports the format as unsupported.
Which iPhone setting makes the camera save JPG instead of HEIC?
Settings → Camera → Formats → Most Compatible. It affects new photos only; to convert existing ones as you copy them to a PC, set Settings → Photos → Transfer to Mac or PC → Automatic.
Do converted JPGs still contain my GPS location?
It depends on the converter. Apple’s own transfer and Preview keep the EXIF block, GPS included. The converters on this site rebuild the JPG from decoded pixels through a canvas, so no metadata is carried across; for JPGs from other sources, strip it with the remove-metadata tool before posting.
Tools used in this guide
Every one of these runs in your browser — the files you work on never leave your device.