The iPhone is the world's most-used camera. Since 2017, every iPhone running iOS 11 or later has saved photos in HEIC format by default — which means HEIC is behind billions of photos taken every year. Yet it remains unfamiliar and occasionally frustrating to many people, largely because it works invisibly inside the Apple ecosystem and conspicuously fails the moment you step outside it. This guide covers everything: what HEIC is, why Apple chose it, how to open it on every platform, and how to convert it.
HEIC stands for High Efficiency Image Container. It's Apple's implementation of HEIF — the High Efficiency Image Format — a standard developed by the Moving Picture Experts Group (MPEG) and published as ISO/IEC 23008-12 in 2015.
At a technical level, HEIC is a container format built on ISOBMFF (ISO Base Media File Format), which is the same architectural standard used for MP4 video files. This isn't a coincidence: the compression engine powering HEIC image data is HEVC (H.265) — the codec developed primarily for 4K and 8K video. Applying video-derived compression to still images turns out to be remarkably effective, yielding smaller files with no perceptible quality loss compared to JPEG.
Apple adopted HEIC as the default photo format in iOS 11 and macOS High Sierra, both released in September 2017. Before that, the iPhone had used JPEG as its default since the original iPhone launched in 2007. Cameras, apps, and software worldwide had spent a decade optimizing for JPEG. That installed base is the main reason HEIC compatibility is still uneven across non-Apple platforms nine years later.
One of HEIC's architectural strengths is its ability to bundle multiple types of data into a single file. A single HEIC photo from your iPhone might contain the main still image, a depth map used for Portrait mode blur, HDR metadata, a full-resolution thumbnail, and — for Live Photos — a 3-second motion clip. JPEG can only hold one image per file with no built-in support for auxiliary data like depth maps.
The case for switching was driven primarily by storage, and the numbers are substantial. A typical 12-megapixel iPhone photo saved as JPEG is approximately 3–5 MB. The same photo saved as HEIC is approximately 1.5–2.5 MB — roughly half the file size at visually identical quality. Multiply that across a typical library:
On a device where storage is finite and upgrades cost money, a 50% reduction in photo file sizes is a compelling reason to change formats.
But storage efficiency isn't the only advantage HEIC holds over JPEG. HEIC supports 10-bit color depth, compared to JPEG's 8-bit. This means HEIC can represent over one billion distinct color values versus JPEG's 16.7 million. In practical terms, this produces smoother gradients in skies and skin tones, better retention of highlight and shadow detail, and more accurate colors in high-contrast scenes. The richer color support is part of why iPhone photos often look notably better than older smartphone photos despite similar megapixel counts.
HEIC also introduced several capabilities that are simply impossible in JPEG:
Here's how the two formats compare across the metrics that matter most:
| Feature | HEIC | JPEG |
|---|---|---|
| Typical file size (12 MP photo) | ~2 MB | ~4 MB |
| Color depth | 10-bit (1.07B colors) | 8-bit (16.7M colors) |
| Transparency (alpha channel) | Yes | No |
| Multiple images per file | Yes | No |
| Lossless compression option | Yes | No |
| Animation / image sequences | Yes | No |
| Depth map support | Yes | No |
| Browser support | Safari only | Universal |
| Android support | Google Photos only | Universal |
| Windows support | Codec required | Universal |
| Editing software support | Limited | Universal |
| Developed by | MPEG / Apple | JPEG Committee |
| Year introduced | 2015 (HEIF standard); 2017 (Apple default) | 1992 |
The conclusion is straightforward: HEIC is technically superior in nearly every quality and capability dimension. JPEG's advantage is entirely about compatibility — four decades of ubiquity mean that JPEG support is essentially universal, while HEIC support is strong inside Apple's ecosystem and uneven everywhere else.
Windows 10 and Windows 11 can open HEIC files, but it requires a codec that isn't installed by default. Without it, Windows Photos shows a placeholder icon, File Explorer shows no thumbnail, and attempts to open the file produce an error.
Windows 11 has slightly improved out-of-the-box HEIC handling in recent builds, but the extension installation remains the most reliable path.
If you'd rather not install anything, convert the HEIC files to JPG using inktools.tech/heic-to-jpg/ before working with them. The converter runs in any browser, requires no installation, and processes files locally so nothing leaves your device. This is the better approach if you need to open a few files once rather than setting up ongoing support.
Android's HEIC support is the weakest of any major platform, which is why the "grey box" problem is so common when iPhone users send photos to Android friends.
The practical recommendation: don't rely on Android HEIC support. Even if a specific recipient uses Google Photos, you can't assume this for everyone you send to. Converting to JPG before sending takes seconds and removes all compatibility uncertainty.
macOS has supported HEIC natively since macOS High Sierra (10.13), released in 2017. On any Mac running High Sierra or later, HEIC files open in Preview and Photos natively, display thumbnails in Finder, and display inline in Safari. No extra software or codec installation is required. HEIC support on Mac is seamless — a HEIC photo is indistinguishable from a JPEG in normal use.
On Linux, HEIC support requires the libheif library, available in the package repositories of most major distributions:
sudo apt install libheif-examples installs command-line conversion tools.heif-thumbnailer for thumbnail support in the file manager.heif-gimp-plugin package adds HEIC open and export support.Linux support is functional for users willing to install the necessary libraries, but doesn't match macOS's frictionless out-of-the-box experience.
Browser support for HEIC images embedded in web pages — using a standard <img> tag — is still limited, which has direct implications for web developers and for anyone who shares links to HEIC files expecting them to open in a browser.
For web developers: Never serve HEIC as your primary image format for web content. Use WebP with JPEG fallback for photographs (<picture> element with multiple <source> elements), and PNG or SVG for graphics. HEIC is a camera and archive format — it was not designed for web delivery and browser support reflects that. Serving HEIC images to web users means a significant portion of your audience sees broken image placeholders.
For most conversion needs, a browser-based tool is the most accessible approach. InkTools offers three converters for HEIC files, all running locally in your browser — your photos are never uploaded to a server.
For larger workflows, these alternative tools are worth knowing:
magick input.heic output.jpg — requires libheif installed. Scriptable for large batches.If you consistently run into HEIC compatibility problems — sending to Android users, working with Windows-based colleagues, or uploading to services that reject HEIC — the simplest permanent fix is to change your iPhone's camera format setting.
With Most Compatible selected, all new photos save as JPEG and all new videos save as H.264. This setting only affects photos taken after the change — your existing HEIC library remains in HEIC format.
The tradeoff to understand: JPEG files are roughly twice the size of HEIC at comparable quality. If you're shooting frequently, you'll fill storage about twice as fast. A reasonable middle ground is to keep HEIC as your default setting and convert individual photos to JPEG only when you need to share them with specific people — using a browser converter makes this quick enough that it's not particularly burdensome.
If you're building an application that accepts HEIC file uploads from iPhone users, here's a practical overview of your options.
The pillow-heif library adds HEIC support to the widely-used Pillow image processing library:
from pillow_heif import register_heif_opener
from PIL import Image
register_heif_opener()
img = Image.open("photo.heic")
img.save("photo.jpg", quality=90)
Install with pip install pillow-heif. The library handles single-image HEIC files and multi-image containers, including Live Photo files containing both still and motion data.
The sharp library supports HEIC input when libvips is built with libheif support:
const sharp = require('sharp');
await sharp('photo.heic')
.jpeg({ quality: 90 })
.toFile('photo.jpg');
Sharp is production-tested and widely deployed for image processing in Node.js applications. HEIC support requires that libheif is available on the system, which is standard on modern Linux server distributions.
If you're accepting HEIC uploads from users, the practical recommendation is to convert to JPEG or WebP immediately on the server upon upload, store the converted version, and discard the HEIC original unless you have a specific need to preserve it. This simplifies your image serving pipeline considerably — you avoid the need to check and handle HEIC at every downstream point where images are displayed or shared.
Convert your HEIC files to any format — free, private, no upload required.