Convert HEIC to PNG
Turn the photos an iPhone saves as .heic into PNG files that Windows, Word and every upload form will open. The photo is read and written inside this tab — it is never sent anywhere.
Up to 20 photos, 50.00 MB each. Output is PNG — lossless, and the one of these three that keeps transparency. Need a smaller file for an upload form? Convert to JPG.
What this page downloads, and when
Your browser is asked to open the photo first. Safari can read HEIC on its own and nothing extra is fetched. Chrome, Edge and Firefox cannot, so the page then fetches a 0.5 MB decoder from this site and runs it here in a worker. That is the only network request your photo causes, and the photo itself is not part of it.
The decoder is libheif, licensed LGPL-3.0. It is served as its own file rather than baked into the page, so it stays a component you can read, replace or rebuild.
About this HEIC to PNG converter
To convert a HEIC photo to PNG without uploading it, choose the .heic files on this page. Your browser is asked to decode each one first; Safari can, and Chrome, Edge and Firefox cannot, in which case a half-megabyte decoder is fetched from this site and run in a worker on your machine. The decoded pixels are written out as a PNG, which stores them exactly rather than compressing them again, and the file is handed straight back to you.
PNG is the right destination when the picture is going to be edited, annotated, cropped or pasted into a document, and the wrong one when it is going into an upload form with a size limit. PNG compression is lossless: every pixel that came out of the HEIC is stored exactly, no second generation of lossy compression is applied, and transparency survives if the file has any. The cost is size — a photograph as PNG is commonly three to six times the bytes of the same photograph as JPEG, because photographic detail is exactly the kind of data lossless compression cannot shrink. If what you need is a file that attaches to a form, convert to JPG instead; if what you need is a file you will work on, this is the one.
Step by step
- 1Choose the HEIC photosUp to twenty files, fifty megabytes each. The .heif extension is the same container and is accepted too, and the files can come straight from a phone, a card reader or a synced folder.
- 2Let the page try your browser firstThe photo is handed to your browser to decode before anything else happens. Where that works, which today means Safari, no decoder is downloaded at all and the conversion is done entirely with what your browser already carries.
- 3The decoder is fetched only when it is neededWhere the browser refuses, a half-megabyte WebAssembly decoder is fetched from this site and started in a worker, then cached by your browser so the rest of the batch costs nothing more to download.
- 4Save the PNGEach finished picture is listed with its pixel dimensions and its size in bytes. The save button writes the file out of your tab; nothing is stored here and closing the tab discards it all.
Lossless, and what that is actually worth
The HEIC you started with is lossy: the phone threw away detail when it saved the file, and no conversion can put that back. What lossless means here is narrower and still useful — the pixels that come out of the decoder are the pixels written into the PNG, with no second round of loss stacked on top of the first.
That matters when the file has more work ahead of it. Every time a photograph is saved again as a JPEG it is re-compressed, and edges and flat areas of colour degrade a little more each time. A PNG in the middle of that chain stops the accumulation, which is why it is the sensible format for a picture you are about to crop, annotate, redact or paste into a report.
It does not matter at all if the next thing that happens to the file is an upload form that re-compresses it anyway. In that case the PNG is three to six times the bytes for no benefit, and the JPG page is the one you want.
The decoder runs here, not on a server
Converting HEIC usually means uploading the photograph to something that holds an HEVC licence and downloading the result. That is a disclosure of the picture itself, and it is made for a fraction of a second of computing your own machine is perfectly capable of.
This page fetches the decoder rather than sending the photograph. It is libheif compiled to WebAssembly, served from this site as a separate file, run inside a Web Worker in your tab, and terminated as soon as the work is done. The transfer is about half a megabyte compressed, measured by weighing the files the package ships, and a twelve-megapixel photograph decodes in roughly a seventh of a second.
The page allows same-origin connections and permission to compile WebAssembly, which is the same narrow exception the background remover holds, and nothing beyond it. No third-party origin is reachable and peer connections remain blocked. The decoder is LGPL-3.0, kept as a replaceable file rather than compiled into the page, and the notices file in the repository names the licence and the upstream source.
What is not carried across
PNG can hold transparency and a HEIC edited to have some will keep it here. What it will not keep is the metadata: re-encoding through a canvas discards the EXIF block, so the camera model, the exposure, the capture date and the GPS coordinates stay with the .heic file. Keep the original if you need them.
High-dynamic-range HEICs are flattened to ordinary eight-bit colour per channel, because that is what a canvas holds. A sixteen-bit HDR photograph will therefore look like a well-exposed ordinary one rather than glowing the way it does in the phone gallery.
A HEIC holding several pictures — a burst, a depth map, an alternative exposure — gives up its primary image, which is the one the phone shows when you open the file. A Live Photo is a still plus a separate video file; only the still is read here.
Limits, and the check that stops a mislabelled file
Twenty photographs per batch, fifty megabytes each, converted one after another. Sequential is deliberate: a forty-eight-megapixel picture is close to two hundred megabytes of raw pixels while it is being encoded, and holding several at once is how a tab runs out of memory rather than how it goes faster.
A canvas asked to write a format it does not support does not fail — it quietly returns a PNG. Here the destination is PNG, so that particular trap cannot bite, but the produced type is checked against the requested type anyway, on both of these pages, so that a browser which behaves unexpectedly produces an error rather than a file whose name is a lie about its contents.
A file that is not a HEIC is reported rather than converted into something wrong, and a corrupt or truncated file fails with a sentence that says so instead of hanging.
The other half of it is that the code has nowhere to send anything from. lib/tools/local-source-policy.test.ts reads every source file under lib/tools, workers, components and app on every test run and fails if any of them contains fetch, XMLHttpRequest, WebSocket, EventSource, sendBeacon or a peer connection, or even a remote address written in a comment. An upload cannot be added here by accident, because the file that would contain one cannot be committed.
Questions people ask
- Should I choose PNG or JPG for a HEIC photo?
- PNG if the picture is going to be edited, annotated or pasted into a document, because nothing is re-compressed and no further quality is lost. JPG if it is going into an upload form or an email, because the PNG of a photograph is commonly three to six times the size for no visible benefit.
- Is the PNG really lossless if the HEIC was lossy?
- The PNG stores exactly the pixels the decoder produced, so nothing further is lost. What the phone discarded when it first saved the HEIC is gone and no conversion can restore it. The value of lossless here is that no second generation of compression is stacked on the first.
- Is the photo uploaded anywhere?
- No. The file is read from your own disk, decoded in your tab and written back out by your browser. The only request this page can make is for the decoder file itself, and it carries no part of your photograph. The policy served with the page allows same-origin requests and nothing else.
- Why is the PNG so much bigger than the HEIC?
- Because lossless compression cannot shrink photographic detail much, while HEVC, which is what a HEIC uses, is built to throw away what an eye does not notice. Expect several times the bytes. That is the trade you are making for pixels that will not degrade when the file is edited and saved again.
- Does transparency survive?
- Yes, where the HEIC has any. PNG holds an alpha channel, so a picture with see-through areas keeps them here, unlike the JPG page, which fills them with white because JPEG cannot store transparency at all. Photographs straight from a camera have no transparency to keep.
- Can I convert several photos at once?
- Up to twenty in one batch, fifty megabytes each, converted one after another with the current file shown as it goes. Each finished picture appears in the list with its dimensions and byte size and its own save button, so you can take them as they arrive.