O ImageMagick (Windows / Mac / Linux) contém uma ferramenta de linha de comando chamada convert
que pode ser usado para muitas coisas, incluindo a compactação de várias imagens em um ícone:
convert 16.png 32.png 48.png 128.png 256.png -colors 256 icon.ico
O comando anterior leva 5 imagens PNG e as combina em um único arquivo .ico.
Diferentemente das outras respostas, esse método pode ser facilmente usado em scripts em lote para gerar automaticamente vários arquivos de ícones. Em um dos meus projetos, tenho uma única imagem vetorial (SVG) e uso Inkscape para gerar pngs de vários tamanhos, seguidos por convert
para criar um contêiner de ícones. Este é um exemplo reduzido (em um script bash):
#!/bin/bash
for size in 16 32 48 128 256; do
inkscape -z -e $size.png -w $size -h $size icon.svg >/dev/null 2>/dev/null
done
convert 16.png 32.png 48.png 128.png 256.png -colors 256 icon.ico