Não sei a solução completa, mas conheço duas peças que podem ser reunidas:
-
icoutils tem
icotool
, que pode criar / extrair arquivos .ico. -
O ImageMagick tem
convert
, que pode converter e redimensionar os arquivos para os tamanhos desejados.
Então, algo assim irá funcionar (pode funcionar apenas para arquivos com extensão ".png"):
#!/bin/bash
# Just pass the original .png image as the only parameter to this script.
SOURCE="$1"
BASE='basename "${SOURCE}" .png'
convert "${SOURCE}" -thumbnail 16x16 "${BASE}_16.png"
convert "${SOURCE}" -thumbnail 32x32 "${BASE}_32.png"
convert "${SOURCE}" -thumbnail 48x48 "${BASE}_48.png"
convert "${SOURCE}" -thumbnail 64x64 "${BASE}_64.png"
icotool -c -o "${BASE}.ico" "${BASE}"_{16,32,48,64}.png
rm -f "${BASE}"_{16,32,48,64}.png
É muito feio, eu sei. Mas é simples de entender e funciona (testei!). Apenas tenha cuidado, pois ele criará arquivos temporários no diretório atual e, posteriormente, os excluirá.