An .ico is a container, not an image
This is the thing to understand before converting anything, because it is where most tools fall down.
A .ico file is a small archive. It holds several complete images at different sizes, and whatever is displaying the icon reaches in and takes the size it needs.
A browser tab wants 16 or 32 pixels. A Windows taskbar wants 32. A desktop in large-icon view wants 256. One file serves all of them, with no markup and no media queries.
Plenty of converters produce a .ico holding exactly one image. It technically opens, and then looks soft or wrong everywhere except the one size it was built at.
The converter on this page writes 16, 32, 48 and 256 by default, and you can add 64 and 128. That is the difference between converting HEIC to ICO properly and producing a file that merely has the right extension.
Which sizes you actually need
The honest short list is shorter than most guides suggest.
| Size | Where it shows up |
|---|---|
| 16 | Browser tabs, bookmarks, address bars |
| 32 | Tabs on high-density screens, Windows taskbar |
| 48 | Windows shell, some bookmark views |
| 256 | Large icon views on the desktop |
| 64, 128 | Occasional shell sizes, safe to skip |
Sixteen, 32 and 48 do the real work. Adding 256 costs the most bytes by far — in our test it was 124 KB of the 139 KB total — but it is what stops your icon looking blocky when Windows shows it large.
How to convert HEIC to ICO in 3 steps
1. Add the photo
Drop in the HEIC. It is decoded on your device — nothing is sent anywhere, which is worth knowing when the photo is a logo you have not published yet.
2. Choose sizes and shape
Leave the four defaults alone unless you have a reason. Then decide between cropping the photo square or fitting the whole frame with transparent padding.
Check the preview. It renders the icon at actual pixel size, including the 16 px version, which is the one that tells you the truth.
3. Download
You get a single .ico. When you convert one file it is named favicon.ico, ready to drop at the root of a site with no HTML changes at all.
Crop or fit: which to pick
A photo is rectangular and an icon is square, so something has to give.
Crop to square takes the largest centred square and scales it down. This is right for photographs, where the subject is usually near the middle and the edges are disposable.
Fit whole image scales the entire frame to fit and leaves the remaining space transparent. This is right for a logo, a screenshot or anything where the edges carry meaning.
If you choose fit and the icon will sit on a light background anyway, the white padding option avoids a transparent halo in software that composites badly.
What is actually inside the file we write
Compatibility here comes down to details that are invisible until something refuses your icon.
Each entry in the container is either a BMP-style DIB or an embedded PNG. We use both, following what icon tooling has converged on: DIB up to 128 px, PNG at 256.
The DIB inside an icon is not a plain .bmp. It carries no file header, its declared height is doubled to account for a legacy 1-bit transparency mask, and that mask has to be present even for 32-bit entries that ignore it entirely. Get any of that wrong and Windows silently rejects the entry.
We verified our output by reading the file back: the directory reports four entries, each declared size matches the bytes actually written, the small entries carry doubled heights and 32 bits per pixel, the 256 entry begins with a PNG signature, and the browser decodes the finished container without complaint.
PNG at 256 is deliberate too. A 256 px DIB is 256 KB on its own, and the compressed PNG in our test was 124 KB for the same pixels.
Why this had to be written by hand
Browsers cannot produce an .ico any more than they can produce a bitmap.
Canvas exports PNG, JPEG and WebP, and nothing else. Ask it for image/x-icon and you get a PNG back with no error at all — the same silent substitution we documented while building our HEIC to BMP converter and HEIC to TIFF converter.
Even if canvas could emit one, it would not help. The hard part of an icon is not compressing pixels, it is the container: a directory of entries, byte offsets to each payload, and per-entry headers with rules that are forty years old.
So converting HEIC to ICO here runs in three steps on your device: libheif decodes the photo, a canvas renders it once per size, and our own code assembles the container around the results. The whole thing took 698 milliseconds in our test, for four sizes from a 12 megapixel source.
If your file is not a .heic
The picker takes the whole HEIF family, not just Apple’s extension.
Files ending in .heif, .heics, .heifs and .hif all work. The last one matters more than it sounds: Canon and Sony name their HEIF photos .hif, and most converters leave that extension out of the picker entirely, which makes the files impossible to select.
If you want the source as an ordinary image first — to crop it in an editor, say, before making the icon — our HEIC to PNG converter gives you a lossless copy, and the HEIF converter covers the camera formats.
Will a photograph make a good icon?
Usually not, and it is better to hear that before you convert than after.
Sixteen pixels is 256 pixels in total. A face, a landscape or a product shot has far more detail than that can carry, so what survives is a small blur of average colour.
What does survive is a single strong shape with high contrast: one letter, one silhouette, one bold colour block. If your source is a photo, crop hard on one element before converting rather than shrinking the whole scene.
The preview in the tool shows 48, 32 and 16 side by side at true size for exactly this reason. If it reads at 16, it reads everywhere.
Where to put the finished file
Drop favicon.ico at the root of your site — example.com/favicon.ico — and browsers will find it with no HTML at all. That fallback has been in place since the format was introduced, and it still works.
Most modern setups add an SVG icon and a 180 px apple-touch-icon.png alongside it, which are separate files rather than entries in the .ico.
For a Windows application or shortcut icon, the same file works unchanged. Include 256 in that case, because the shell will use it.
Your new favicon is not showing up
Almost always caching, and almost never the file.
Browsers hold on to favicons hard, and a normal reload will not shift one. Open example.com/favicon.ico directly to confirm the file is really there and really updated — if that URL shows the new icon, the file is fine and the tab is just stale.
A hard reload, a private window, or clearing site data will each fix it. Some browsers keep favicons in a separate store that survives a cache clear, in which case the private window is the fastest way to see the truth.
Windows caches shortcut icons separately again, which is why a changed application icon sometimes needs the icon cache rebuilding rather than anything to do with your file.
If the icon appears but looks soft, that is a different problem, and it usually means the .ico contains only one large size that the browser is scaling down. Rebuild it with 16 and 32 included.
The bottom line
Convert HEIC to ICO when you need a favicon or a Windows icon, and make sure what you get is a real multi-size container rather than a single image with an .ico extension.
Everything here runs on your own machine, which for an unpublished logo is not a small detail.
Keep 16, 32 and 48. Add 256 if the icon will ever be shown large. Crop tight, check the 16 px preview, and remember that the smallest size is the one that decides whether the icon works at all.