PNG to ICO converter

Drop in a PNG and get back a real multi-size .ico. It runs in your browser, so the file is never uploaded anywhere.

Drop a PNG here, or click to choose

JPEG, WebP, GIF, BMP and SVG work too. Up to 12 MB. Nothing is uploaded — the conversion happens on this device.

    An ICO is a container, not an image format

    This is the thing that makes ICO different from PNG or JPEG, and it explains most of what follows. An .ico file does not hold one picture. It holds a short directory — six bytes of header, then sixteen bytes per image saying how big that image is and where in the file it starts — followed by several complete images packed one after another.

    So a single favicon.ico can carry a 16-pixel version drawn for legibility, a 32-pixel version with more detail, and a 48-pixel version for a desktop shortcut. Windows and the browser each read the directory, pick the entry closest to the size they need, and ignore the rest. That is why renaming a PNG to .ico does not work: the directory is not there, and nothing knows how to read what follows.

    Since Windows Vista each of those packed images may be an ordinary PNG. Before that they had to be uncompressed bitmaps with a separate one-bit mask for transparency, which is why very old .ico files are so much larger than they look. This converter writes PNG payloads.

    Which sizes belong inside one

    Three cover almost everything, and they are the three ticked by default:

    • 16×16 — the browser tab, the address bar, and the bookmark list on a standard-density screen.
    • 32×32 — the same places on a high-density screen, plus the Windows taskbar.
    • 48×48 — a shortcut sitting on the Windows desktop.

    The larger boxes are there because desktop applications genuinely use them: Windows Explorer will draw a 256-pixel entry in its extra-large icon view. For a website favicon they are dead weight. Every image inside the file is downloaded whenever the file is, so adding 128 and 256 to a favicon roughly quadruples a request that every cold visitor makes, to serve a size no browser will ever ask for. Tick them for an application icon; leave them alone for a site.

    Why nothing larger than 256 can go in

    The width and height in each directory entry are stored as a single byte each, and a byte cannot hold 256. The format works around that by treating zero as the code for 256, which is fine until someone tries to write 512: the low byte of 512 is also zero, so a 512-pixel entry is byte-for-byte indistinguishable from a 256-pixel one. Windows reads it as 256, scales the pixels to match, and the result is soft with no error anywhere to explain why.

    Some converters write the entry anyway. This one will not. Anything above 256 pixels comes out as a loose PNG instead, which is the correct home for it — a 512-pixel icon is what Android reads from the web manifest, and that has never been an ICO in the first place.

    Start from something that survives being small

    A 16-pixel square is 256 pixels in total, which is about the same amount of information as a single letter of body text. A wordmark reduced to that size becomes a grey smear; a detailed illustration becomes a different grey smear. The marks that work are the ones already built from two or three shapes: a monogram, a symbol, a strong silhouette.

    Two settings on this page exist for that. Breathing room insets the mark so it is not touching the edges, which matters because most surfaces that draw a favicon put something immediately beside it. And if the source is not square, the choice is between padding it and cropping it — padding keeps the whole mark and makes it smaller, cropping fills the square and cuts the ends off a wide logo. Padding is the safer default and is what happens unless you change it.

    Transparency is preserved. Pick a solid background instead if the mark is dark and might land on a dark surface, because a transparent dark logo on a dark tab bar disappears entirely.

    The one file that gets requested whether you link it or not

    Browsers ask for /favicon.ico at the root of a domain on their own initiative, without being told to, and they have done so since long before the <link rel="icon"> tag existed. If nothing is there, every cold visit puts a 404 in the log. Putting a real file at that path is the cheapest possible fix, and it is why the .ico has outlived several attempts to replace it.

    It is not the whole job any more, though. Apple wants a 180-pixel PNG, Android reads two sizes out of a web manifest, and none of that lives in an ICO. If you are setting up a site rather than converting a single file, the favicon generator writes all of those at once along with the markup that points at them.

    Why nothing is uploaded

    The image is decoded by the browser, resized on a canvas, encoded back to PNG at each size, and then packed into an ICO container written byte by byte in the page. There is no server anywhere in that path, no queue to wait in, and no copy of a client’s unreleased logo sitting on a stranger’s disk. Turn the network off after this page has loaded and it still works.

    Designing a site? Siter.io builds it from Figma.

    Hey there 👋  Friends from designmodo are here to help!