ICO to SVG: Pick One Size, Trace It Clean

An .ico is not an image, it is a directory of images: usually 16, 32, 48 and 256 pixels, sometimes with different encodings inside the same file. A converter that silently picks one of them is guessing. This page lists every entry with its size, bit depth and encoding, decodes the one you choose — PNG or legacy DIB with its AND mask — and traces it into paths.

Every entry listedPNG & DIB1–32 bppNo upload

1. Drop an icon

directory read in this tab
Drop a .ico or .cur here
or
No icon loaded yet — drop a file, or start from the sample.

2. Tracing

applies on change
Colours
Detail8
Smoothing5
Clean up
Decimalspath precision

3. Preview & export

—
Load an ICO to trace it
Output keeps the entry's pixel size as its viewBox, so 256 px in means a viewBox of 256.

Windows icons are a container format pretending to be an image. The file starts with a directory: one 16 byte record per embedded image, each with its own size, bit depth and byte range. Then come the images themselves, and they need not use the same encoding — a modern .ico usually mixes PNG entries for the large sizes with DIB entries for the small ones. A converter that hands the file to the browser gets whichever entry the browser prefers and no way to tell you which one that was.

The directory, and why the size you pick decides the result

Every entry is an independent raster. The 16 pixel one holds 256 pixels of information in total; tracing it produces a shape that is right at 16 pixels and wrong everywhere else, which is the source of most "your converter made a blurry blob" complaints. The table below is the entry list from a typical four-size icon:

EntryPixelsWhat a trace can recover
16 × 16256Almost nothing. Letters close up, curves become steps. Fine for checking the file parses
32 × 321,024A silhouette and the main shapes, no interior detail
48 × 482,304Usable for a simple mark: two or three fills, a handful of nodes
128 × 12816,384The smallest size where corners survive as corners
256 × 25665,536The only entry worth vectorising for real use, and usually a PNG stream

The tool preselects the largest entry because that is almost always the right answer, and it reports the others so you can see what you are giving up. When a container's biggest entry is 48 pixels, the honest move is to find the original artwork rather than to trace harder: no amount of detail setting invents pixels that were never saved.

The ICO directory listed as selectable entries with sizes and encodings, next to the traced SVG of the 256 pixel entry
The directory is read from the container, so each button is a real entry with its real byte length; the trace below is the 64×64 entry at 3 fills, 5 rings and 41 nodes. · swipe to see it all

PNG entries and DIB entries in the same file

Two encodings, both common, and they fail differently:

The height-doubling is the detail most readers get wrong: take the header height at face value and every DIB icon decodes as two stacked half-images. The AND mask is the second: 8 and 24 bit icons express transparency only through it, so a reader that ignores the mask paints a black rectangle where the transparency should be.

What a traced favicon is for

An ICO exists because browsers once needed a fixed set of raster sizes. An SVG favicon removes the set: declare it once with <link rel="icon" type="image/svg+xml" href="/icon.svg"> and it is drawn at 16 pixels in a tab, 32 in a bookmark bar and 180 on a phone home screen from a single file. Keep the .ico as a fallback for older browsers and for the icon slots the operating system fills itself.

Two practical notes. First, a favicon SVG should be a single flat shape with a generous safe area — at 16 pixels, a detailed mark collapses into mud no matter how the file is encoded. Second, a traced icon inherits the pixel grid of its source: if the 256 entry was drawn on a grid with anti-aliased edges, the trace will show a slight wobble at large sizes. That is honest to the source, and it is why tracing a 256 entry beats tracing a 48 one every time.

Cursor files, and the hotspot

A .cur is the same container with type 2, and the hot spot coordinates live in the directory record — the two bytes that hold the colour count in an .ico. The tool reads and reports them, and they are lost on export, because an SVG has no concept of a click point. If the cursor matters, note the hot spot before you convert.

After the trace

An SVG favicon is small by nature, but the path data can still be tightened with SVG Compressor, and the file is worth validating with SVG Validator before it goes in a <head> — a missing xmlns is the classic reason an SVG favicon renders in one browser and not another. For the raster direction, SVG to PNG exports the 32 pixel fallback from the vector you just made.

Related containers: GIF to SVG if the icon was exported as a GIF with a palette, and WebP to SVG for the alpha plane in a WebP mark.

Frequently asked questions

Why does the size I pick matter so much in an ICO?

An ICO is a directory of separate rasters, not one scalable picture. The 16 pixel entry holds 256 pixels in total, so a trace of it is right at 16 pixels and wrong everywhere else. Pick the largest entry, and if the container only goes to 48, find better artwork.

What is the difference between a PNG entry and a DIB entry?

A PNG entry is a complete PNG stream, used for 256 pixel icons since Vista. A DIB entry is a headerless BMP with the height doubled, pixels bottom-up and a one bit AND mask for transparency. Both are decoded here, mask included, so old 8 and 24 bit icons keep their transparent corners.

What is a traced favicon actually for?

One file instead of four to six raster sizes. An SVG favicon is drawn at whatever size the browser needs, so it stays sharp on a 4× display without shipping 16, 32, 48 and 256 pixel copies. Keep a 32 pixel ICO as a fallback.

Why does my icon come out as a blurry blob?

Almost always because a 16 or 32 pixel entry was traced. At that size the edges are already gone: the icon was drawn larger and resampled down, and the tracer sees the resampling. Choose the 128 or 256 entry.

Is the icon file uploaded?

No. The container is read with FileReader and parsed in the tab; PNG entries are decoded by the browser and DIB entries in JavaScript. No upload endpoint, no external script.

Related SVG workflows

More free SVG tools