Skip to content

ICO to PNG Converter

Browser-side — no upload
Last verified May 2026 — runs in your browser

ICO converts to PNG by extracting the largest embedded raster image.ICO is a Windows container (since 1985) packaging multiple sizes (16, 32, 48, 64, 128, 256 px). The extracted PNG is a single fixed-size image you can edit in any tool.

ICO vs PNG comparison

ICO is a multi-size container; PNG is a single-image format. Convert to PNG when you need to edit a single icon size in a standard image editor.
PropertyICOPNG
Format typeMulti-image containerSingle raster image
Embedded sizesMultiple (16, 32, 48, 64, 128, 256 px)One per file
CompressionPer entry: BMP or PNG insideDEFLATE (lossless)
Alpha channelYes (since Windows XP)Yes (RGBA)
Year introduced1985 (Microsoft Windows 1.0)1996 (RFC 2083)
Browser support (favicon)Universal (~100%)Universal (~100%)
Best forWindows favicons + app iconsGeneral-purpose raster image
Max embedded size256 × 256 px (modern)2³¹−1 px each side
File extension.ico.png
MIME typeimage/vnd.microsoft.iconimage/png
Editing in image viewersLimited (specialised tools)Universal (every editor)
AnimationNo (use .ani for that)No (use APNG)

ICO to PNG Converter — Honest About Single-Frame Browser Decode

Convert ICO files (Microsoft icon container originated with Windows 1.0 in November 1985 for 32x32 monochrome icons; modern multi-resolution ICONDIR + ICONDIRENTRY container per learn.microsoft.com/en-us/previous-versions/ms997538; PNG-encoded image data added with Windows Vista (RTM 8 November 2006; general consumer availability 30 January 2007) for 256x256 large icons) to PNG (W3C Recommendation 10 November 2003 / ISO/IEC 15948:2004). The conversion runs locally via WHATWG Canvas drawImage + HTMLCanvasElement.toBlob('image/png'). Honest about what the browser can do — the tool delegates to the browser's built-in HTMLImageElement ICO decoder, which loads exactly ONE bitmap per ICO (the browser auto-picks based on viewport size and DPR); the multi-resolution ICONDIR array is not exposed via DOM APIs. Output is a single PNG at whatever resolution the browser chose, with transparency preserved through 32bpp ARGB. To extract every embedded resolution from a multi-size ICO, you would need a desktop tool with a custom ICO parser (IcoFX, Greenfish Icon Editor, or a CLI such as ImageMagick `convert favicon.ico favicon-%d.png`). Files never leave the device.

How to convert ICO to PNG

  1. Drop an .ico file onto the tool or click to browse. Favicons downloaded from any website (right-click → Save image as on the favicon, or fetch /favicon.ico directly) work as input.
  2. The browser's built-in ICO decoder parses the ICONDIR header, picks one bitmap from the multi-resolution array (heuristic varies across browsers), decodes that bitmap, and the tool draws it onto a canvas at the picked native dimensions.
  3. Preview the result — the dimensions shown are whatever the browser picked from the source ICO (often the largest available, but not guaranteed).
  4. If the source ICO contains multiple resolutions and you need a SPECIFIC one (not the auto-picked size), use a desktop tool with a real ICO parser instead — ImageMagick `convert favicon.ico favicon-%d.png` extracts every frame.
  5. Click Download to save the PNG. The original ICO stays on disk untouched — files never leave the device.

Common use cases

  • Extracting a favicon from a website's /favicon.ico for a design mood board or brand audit (single-resolution sample suffices for visual inspection).
  • Converting a single-resolution Windows .ico resource file to PNG for use in a cross-platform Electron or web project.
  • Producing a PNG sample from a multi-resolution ICO when you only need the auto-picked size (tab favicon, bookmark icon).
  • Backing up the largest ICO frame as a PNG for archival before retiring a legacy Windows desktop icon.
  • Confirming an ICO file is structurally valid (decodes successfully into a viewable bitmap) without opening a dedicated icon editor.

Frequently asked questions

Does the tool extract every embedded resolution from a multi-size ICO?

No — the tool extracts ONE frame, whichever resolution the browser auto-picked when decoding the ICO via HTMLImageElement. The DOM exposes no API to enumerate ICONDIRENTRY entries or pick specific resolutions; only one bitmap reaches Canvas.drawImage. For full multi-frame extraction (each embedded size to a separate PNG), use a desktop tool with a custom ICO parser: ImageMagick `convert favicon.ico favicon-%d.png` outputs every frame as a numbered PNG sequence; IcoFX and Greenfish Icon Editor have GUIs for the same. JS libraries like `icojs` ship a custom ICO parser but would add ~30 KB to the bundle for a use case that's shrinking (modern favicons use declared PNG/SVG via `<link rel='icon' sizes='WxH'>` per WHATWG HTML).

Which resolution does the browser pick from a multi-size ICO?

It depends on the browser and context. Chrome/Edge typically pick the largest available size (or 32x32 for the tab favicon use case). Firefox and Safari have their own heuristics. There is no spec-defined rule; the heuristic varies and may change across browser versions. If you need a deterministic resolution choice, use a desktop ICO tool — the browser auto-pick is non-deterministic by design.

Is transparency preserved?

Yes, when the picked ICO frame carries alpha. PNG-encoded ICO frames (Microsoft's recommended format for 256x256 since Windows Vista 2006-2007) ship native 32bpp ARGB; BMP-style frames carry alpha via a 1-bit AND-mask appended after the colour data. The browser decoder handles both paths and Canvas.drawImage preserves the alpha into the output PNG (which uses 8-bit alpha per RGBA pixel).

Can I rebuild an ICO from PNGs with the sister tool?

Sort of — the png-to-ico tool in this suite outputs a single-resolution PNG sized for use as a favicon (suitable for `<link rel='icon' sizes='WxH' type='image/png'>` declarations per WHATWG HTML), NOT a true multi-resolution ICO container. Building a real ICO container with multiple embedded resolutions requires a custom JS encoder that writes the ICONDIR header + ICONDIRENTRY entries + concatenated image data blocks. Modern favicon practice (per WHATWG / Google web.dev favicon guidance) prefers declared PNG/SVG over multi-resolution ICO.

Is my file uploaded?

No. The decode + canvas draw + PNG encode all run client-side via WHATWG Canvas drawImage + HTMLCanvasElement.toBlob('image/png'). DevTools Network tab shows zero upload requests during conversion.

ICO container internals + browser single-frame decode reality

ICO is structurally a multi-resolution container, not a single-image format: a 6-byte ICONDIR header (idReserved=0, idType=1, idCount=N) is followed by an array of N × 16-byte ICONDIRENTRY structures (each carrying bWidth, bHeight, bColorCount, wPlanes, wBitCount, dwBytesInRes, dwImageOffset), then a contiguous block of N image bitmaps. Each bitmap can be either traditional BMP-format (DIB without the BITMAPFILEHEADER, since Windows 1.0 1985) or — since Windows Vista (RTM 8 November 2006; general consumer availability 30 January 2007) — a complete PNG file (header included) in 32bpp ARGB format. Microsoft recommends storing 256x256 large icons as PNG-compressed to keep file sizes reasonable. The browser-decode caveat is the practical limitation users hit: HTMLImageElement (the path used when ICO loads via `<img src='favicon.ico'>` or `<link rel='icon' href='favicon.ico'>`) and the Canvas drawImage path both expose only ONE bitmap per ICO load. The browser parses ICONDIR, picks one entry based on context (viewport, DPR, available sizes — the heuristics differ across Chrome / Firefox / Safari / Edge), decodes that single bitmap, and discards the rest. The DOM exposes no API to enumerate ICONDIRENTRY entries or extract specific resolutions. This tool produces a PNG of whatever resolution the browser auto-picked. For full multi-frame extraction (every embedded size to a separate PNG), use a desktop tool with a real ICO parser: ImageMagick (`convert favicon.ico favicon.png` extracts all frames as a numbered PNG sequence), IcoFX, Greenfish Icon Editor, or one of several JS libraries that ship a custom ICO parser (`icojs`, `to-ico` — these would add ~30 KB to bundle size). Modern favicon practice has shifted away from multi-resolution ICO toward declared PNG/SVG via `<link rel='icon' sizes='WxH' type='image/png'>` (per WHATWG HTML Living Standard), so the multi-frame ICO use case is shrinking.

  • Source ICO decoded per Microsoft Windows 1.0 (November 1985) container format with Vista PNG-encoded image data support (since 30 January 2007)
  • ICO browser-native decoding via HTMLImageElement (Chrome, Firefox, Safari, Edge all supported)
  • Single-frame output — the browser auto-picks one resolution from the multi-size ICO based on viewport / DPR heuristics
  • Honest about scope — for full multi-frame extraction (each embedded resolution to a separate PNG), use a desktop tool such as ImageMagick or IcoFX
  • Output PNG per W3C Recommendation 10 November 2003 / ISO/IEC 15948:2004 with full 24-bit colour depth + 8-bit alpha channel preserved through Canvas
  • Transparency carried losslessly when the picked ICO frame is 32bpp ARGB (Vista PNG-encoded format) or BMP+AND-mask
  • Browser-side via WHATWG Canvas drawImage + HTMLCanvasElement.toBlob('image/png') — no upload
  • Operates in sRGB (IEC 61966-2-1:1999) at 8-bit precision; ICO bitmap data is interpreted as sRGB by the browser decoder

Free. No signup. No file uploads. Ads via AdSense (consent required).

Sources (7)
  • Microsoft Corporation (1985). ICO Icon File Format — ICONDIR + ICONDIRENTRY container structure. learn.microsoft.com/en-us/previous-versions/ms997538(v=msdn.10) — ICO format originated with Windows 1.0 (released 20 November 1985) for 32x32 monochrome icons; modern ICO is a multi-resolution container with a 6-byte ICONDIR header (idReserved=0, idType=1, idCount=N), an array of N × 16-byte ICONDIRENTRY structures (bWidth / bHeight / bColorCount / wPlanes / wBitCount / dwBytesInRes / dwImageOffset), and a contiguous block of N image bitmaps (BMP-style or, since Windows Vista 2006-2007, PNG-encoded).
  • Microsoft Corporation (2006). ICO PNG-encoded image data (Windows Vista large icons). devblogs.microsoft.com/oldnewthing/20101022-00 (Raymond Chen, 22 October 2010) + axialis.com/tutorials/tutorial-vistaicons.html — Windows Vista (RTM 8 November 2006; general consumer availability 30 January 2007) introduced 256x256 large icons stored as PNG-compressed image data inside the ICO container in 32bpp ARGB format; the entire PNG file (header included) is embedded in place of the BMP block; backwards compatible with XP for the legacy 48/32/16 sizes.
  • Shyam, B. (Microsoft Corporation) (1999). favicon.ico convention introduced in Internet Explorer 5. thehistoryoftheweb.com/how-we-got-the-favicon — Bharat Shyam at Microsoft introduced the favicon convention shipped with Internet Explorer 5 (released 18 March 1999) while working on the IE Favorites feature; the convention places favicon.ico at the site root and is auto-fetched by browsers regardless of any <link> declaration.
  • WHATWG (live). HTML Living Standard — HTMLImageElement (browser-native ICO decoding limitations). html.spec.whatwg.org/#htmlimageelement — ICO is natively decoded by every modern browser (Chrome, Firefox, Safari, Edge) via their built-in ICO decoder + favicon registry. Critical limitation: the DOM exposes only ONE bitmap per ICO load (the browser auto-picks based on viewport / DPR / available sizes); the ICONDIR multi-resolution array is not exposed via DOM APIs. To extract every embedded resolution, a custom JS ICO parser is required (parse ICONDIR + ICONDIRENTRY array + extract each image data block separately).
  • WHATWG (live). HTML Living Standard — Canvas 2D Context: drawImage() + toBlob('image/png'). html.spec.whatwg.org/#dom-context-2d-drawimage + canvas section 4.12.5 — browser conversion mechanism: load ICO into HTMLImageElement (decoder picks one resolution) → drawImage onto canvas at native dimensions → toBlob('image/png') with full 24-bit colour and alpha preservation; lossless from the decoded pixels.
  • W3C (PNG Working Group) (2003). Portable Network Graphics (PNG) Specification (Second Edition). W3C Recommendation 10 November 2003 / ISO/IEC 15948:2004 — target lossless raster format with full 24-bit colour depth + 8-bit alpha channel; the standard ICO contained format since Windows Vista 2007.
  • International Electrotechnical Commission (IEC) (1999). Multimedia systems and equipment — Colour measurement and management — Part 2-1: Default RGB colour space — sRGB. IEC 61966-2-1:1999 — default 8-bit RGB colour space the Canvas 2D path operates in; ICO bitmap data is interpreted as sRGB by the browser decoder during the load step.

These are the W3C, ISO/IEC, ITU-T, and IETF specifications the tool implements or builds on. Locate them on w3.org, iso.org, itu.int, or datatracker.ietf.org.

Sponsored

By ·