How to convert HEIC to GIF without uploading it
Every "free" online HEIC converter you've used uploads your photos to a company server, converts them there, and — in several documented cases — keeps a copy or a live download link for days. For family photos, IDs, and anything personal, that's an unnecessary risk. The safer approach is to convert the file where it already is: on your own device.
This tool does exactly that. When you drop a HEIC here, your browser:
- Loads a real HEIC decoder (libheif, compiled to WebAssembly) — but only when you convert your first file, so the page itself stays light.
- Decodes each photo in a background thread, one file at a time, so the page never freezes — even on a camera-roll batch.
- Reads the photo's orientation data and stores the output upright, so a portrait photo doesn't come back sideways.
- Quantises the pixels to at most 256 colours and re-encodes them as a GIF with a JavaScript GIF encoder — one still GIF per file, or, in animated mode, one frame per photo in a single looping GIF. Your original file is never modified.
Still GIF or animated GIF — which should you pick?
Pick still GIF when you need one shareable image per photo — a reaction image, a sticker, or a photo that has to open in an app that cannot read HEIC. Pick animated GIF when you have a burst, a Live Photo sequence, or several photos that tell a story together: each photo becomes one frame, played at the frame rate you choose, looping forever. Animated GIFs grow with every frame, so keep them short — 20 frames or fewer — or the file becomes too large to send.
Why does the GIF look worse than the photo?
GIF was designed in 1987 for simple graphics, and it stores at most 256 colours per frame. A photo contains thousands of shades, so the converter has to pick the 256 that matter most and dither the rest — speckling pixels to fake the missing shades. Smooth skies, skin, and gradients suffer most; flat graphics, logos, and text survive well. That is a limit of the format, not a defect in the conversion. If the photo has to look its best, use our HEIC to PNG converter instead: PNG keeps every pixel exactly.
Why won't my iPhone photos open on Discord or Slack?
Since iOS 11, iPhones save photos as HEIC (High Efficiency Image Container) by default. HEIC uses the same HEVC compression as 4K video, so a photo takes roughly half the space of a JPG. The catch: many chat apps, web upload forms, and older photo editors don't include a HEIC decoder, so the file either won't open or uploads as an unusable attachment. GIF opens everywhere and even plays inline — which is why it is the shareable format for a photo that has to be seen, not just stored.
Stop your iPhone taking HEIC photos
To save future photos as JPEG instead: open Settings → Camera → Formats and choose Most Compatible. New photos will be JPEGs. Your existing photos stay in HEIC — convert those here. Note that "Most Compatible" photos take roughly twice the storage space, which is why Apple made HEIC the default.
Honest limitations
Only 256 colours
Photos lose detail and smooth gradients band or dither. Dithering softens the banding but adds a speckled texture. For faithful photos, convert to PNG instead.
GIFs are larger than HEICs
Expect the GIF to be bigger than the HEIC it came from, and an animated GIF to grow with every frame. There is no quality slider that makes a GIF small — only fewer colours, a smaller width, or fewer frames.
Live Photos lose the motion
A Live Photo is a still plus a short video, and the motion is not inside a plain HEIC still. Only the still image is converted; the video part is dropped. Keep your original if you want the motion — or add several stills in animated mode to rebuild it.
Transparency is flattened
GIF transparency is all-or-nothing: a pixel is either fully opaque or fully gone. Partial transparency is flattened onto the background colour you pick, so choose one that matches where the GIF will be shown.
Metadata is stripped
Camera metadata (EXIF, including location) is dropped on re-encode, and HDR / 10-bit HEIC photos are tone-mapped down to 8-bit. Orientation is preserved — the output is stored upright.