Turn any ICO file into a crisp PNG in seconds
Drop your .ico file into the tool above and you get a clean PNG image back instantly — no account, no upload, no waiting. ICO files are great for Windows icons, but almost nothing else reads them natively. Converting to PNG gives you a format every browser, design app, and operating system understands.
How to convert ICO to PNG (3 steps)
- Choose your ICO file — click the upload area or drag and drop the file straight onto it.
- Wait one moment — the conversion runs entirely in your browser using the HTML5 canvas. No server involved.
- Download your PNG — click the download button and you have a ready-to-use PNG file.
Your file never leaves your device. Nothing is uploaded anywhere, so sensitive icons (like a company logo you haven't released yet) stay private.
Worked example: converting a favicon ICO to PNG
Say you have favicon.ico — the tiny icon file websites use. You want to use the logo inside it as a PNG for a presentation or design file.
- Input:
favicon.ico— a 32×32 pixel icon, multi-layer ICO format - Output:
favicon.png— a 32×32 PNG with full transparency preserved, readable by Figma, Photoshop, Canva, or any web browser
ICO files can actually contain several sizes bundled together (16px, 32px, 48px, 256px). The converter extracts the largest available layer and exports it as PNG. If you need a specific size, resize the PNG afterwards with any image editor.
How to convert ICO to PNG in code
Working in a script or automation pipeline? Here are two minimal, copy-pasteable snippets.
Python (Pillow)
Install Pillow first: pip install Pillow
from PIL import Image
img = Image.open('favicon.ico')
# sizes contains all layers; pick the largest
img.save('favicon.png', format='PNG')
Pillow automatically picks the largest embedded layer when you call save() on an ICO. The alpha channel (transparency) is preserved in the output PNG.
Node.js (sharp)
Install sharp: npm install sharp
const sharp = require('sharp');
sharp('favicon.ico')
.png()
.toFile('favicon.png')
.then(() => console.log('Done!'))
.catch(err => console.error(err));
Sharp uses the libvips library under the hood and handles the ICO container format well. Both snippets produce a PNG that keeps any transparent areas intact.
How it works under the hood
Your browser reads the ICO file using the HTML5 File API and draws the image onto an off-screen canvas element. The canvas then exports that pixel data as a PNG using canvas.toDataURL('image/png') or canvas.toBlob(). The PNG is handed back to you as a download — no server call is ever made. You can verify this in your browser's Network tab: you'll see zero image upload requests.
The ICO format is defined in Microsoft's icon guidelines. It's essentially a container that bundles multiple bitmap sizes. PNG, on the other hand, is a lossless, widely-supported format defined by the W3C PNG specification.
When to convert ICO to PNG — and when not to
| Situation | Use ICO to PNG? | Why |
|---|---|---|
| Editing the icon in Figma, Sketch, or Photoshop | ✅ Yes | Those apps open PNG natively, not ICO |
| Using the logo in a presentation or document | ✅ Yes | PNG is universally supported |
| Adding to a website as a favicon | ❌ Keep ICO | Browsers still prefer .ico for the favicon link element |
| Publishing a Windows app icon | ❌ Keep ICO | Windows .exe and .dll files embed ICO directly |
| Converting for use in a React or Vue component | ✅ Yes | Import PNG as an asset; ICO is not a standard web image type |
Privacy and your files
Because everything runs inside your browser, your ICO file is never uploaded to any server. Close the tab and the image data is gone. This matters if you're working with unreleased brand assets or any proprietary imagery.
When you're done here, you might also find these handy for other tasks: JSON Beautifier — Format, Validate & Minify JSON Online or JSON Validator — Check & Fix JSON Errors Online (Free).
Bottom line: if you have an ICO and need a PNG right now, use the converter above — it's instant, free, and completely private.