Why does my PNG come out tiny, or only one size?
An ICO is a small folder of pictures: the same icon at several sizes, each stored separately. A converter that hands the file to the browser’s own image decoder gets just one of them, the one the browser picks (Chromium’s decoder sorts them largest first). That is why some tools give only the largest image, and why some offer to enlarge a small one, which blurs it. This page reads the file’s list of images itself and gives you every one, at the size it was drawn.
We ran the converter’s code over every cursor in a Windows 11 PC’s Cursors folder plus three of its app icons: 186 files holding 940 images. Every image came out, and every one matched ImageMagick’s reading of the same image pixel for pixel. Windows cursors turned out to hold five sizes each, from 32 to 128 px; the app icons held eight, from 16 px up.
What is inside an ICO file?
A short header says whether the file is an icon or a cursor and how many images it holds; then each image has an entry with its size, colours and where its data starts. A width or height of 0 in that entry means 256. The images themselves come in two kinds:
- PNG images, used since Windows Vista: a complete PNG file inside the ICO. This page copies it out byte for byte, so nothing changes.
- Bitmap (BMP-style) images, the original kind: rows of pixels in 1, 4, 8, 24 or 32 bits, followed by a 1-bit mask that marks which pixels are transparent. This page decodes them by hand and writes a PNG with the same pixels (in current browsers; without the browser’s compression feature it falls back to the canvas, which is exact for solid and fully clear pixels).
Each image is listed with its size and kind, largest first, and named by size, such as favicon-32x32.png.
Why is the background black instead of transparent?
Old icons do not use an alpha channel. They draw transparent pixels as black in the colour image and set a bit in the separate mask; Windows combines the two when it draws the icon. A converter that ignores the mask shows those pixels as black. This page applies the mask, so they come out fully transparent. Since Windows XP, 32-bit icons can carry the transparency in an alpha channel instead; when every alpha value is zero, as in some files, the icon counts as opaque and the mask applies, as Windows does.
One case cannot be copied: classic cursors can mark pixels to invert the colour beneath them. PNG has no such operation, so those pixels become transparent, as in Chrome.
Cursor (.cur) files
A cursor is an ICO with one extra fact per image: its hotspot, the pixel that does the clicking. This page shows each image’s click point next to it (the standard arrow’s is the top-left corner, 0, 0) so you can keep it when you edit the PNG and turn it back into a cursor. Animated cursors (.ani files) are not read here.
A website’s favicon to PNG
Save the site’s favicon.ico (often at /favicon.ico) and open it here. If a site serves a PNG with an .ico name, this page tells you, since the file is already a PNG and only needs renaming. To make a new favicon from an SVG logo, use SVG to ICO.
Why nothing is uploaded
Your browser reads each file on this page, and the PNGs are written here: the icons never leave your device. Icon files are small; run outside the browser over the 186 test files, the same code took a median of 3.9 ms per file.