img2ico

English | 简体ä¸ć–‡
A tool for converting image to ICO format.
Features
- Convert PNG, JPEG, BMP, and WebP image formats to ICO.
- Uses WASM for faster processing. If WASM running fails, it falls back to a pure JavaScript implementation.
- Supports custom ICO sizes.
- Available as a CLI tool, Node.js module, and for use in browsers.
Usage
CLI
Convert images to ICO from your command line.
npx img2ico <inputFile> [outputFile] [-s, --sizes <sizes>]
<inputFile>: Path to the input image file.
[outputFile]: Optional path for the output .ico file. If omitted, it defaults to <inputFile>.ico.
-s, --sizes <sizes>: Comma-separated list of desired ICO sizes (e.g., 16,32,48). Default sizes are 16,24,32,48,64,96,128,256.
Examples:
npx img2ico icon.png
npx img2ico icon.png icon.ico -s "16,32,48"
Web UI
Access the web interface for easy conversion: https://nini22p.github.io/img2ico/
The web tool provides a wide range of size options, including 16, 20, 24, 30, 32, 36, 40, 48, 60, 64, 72, 80, 96, 128, 256, 512, 1024.
Node.js
Use img2ico in your Node.js project.
npm install img2ico
import img2ico from 'img2ico';
import fs from 'fs/promises';
async function convertImage() {
const imageBuffer = await fs.readFile('icon.png');
const icoResult = await img2ico(imageBuffer);
const icoBuffer = icoResult.toBuffer();
await fs.writeFile('icon.ico', icoBuffer);
console.log('ICO created successfully!');
}
convertImage();
Browser
Use img2ico in your web project.
npm install img2ico
import img2ico from 'img2ico';
async function convertImageInBrowser(file: File) {
const arrayBuffer = await file.arrayBuffer();
const icoResult = await img2ico(arrayBuffer);
const icoDataUrl = icoResult.toDataUrl();
const a = document.createElement('a');
a.href = icoDataUrl;
a.download = 'icon.ico';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
const imgElement = document.createElement('img');
imgElement.src = icoDataUrl;
imgElement.alt = 'Generated ICO';
document.body.appendChild(imgElement);
}
document.getElementById('fileInput').addEventListener('change', async (event) => {
const file = (event.target as HTMLInputElement).files[0];
if (file) {
await convertImageInBrowser(file);
}
});
License
MIT