Aqui está a resposta aceita por Rob W , com uma adaptação trivial para evitar a necessidade de digitar os tamanhos (16, 32, etc.) mais de uma vez:
#!/bin/bash
files=()
for size in 16 32 48 128 256; do
inkscape -z -e "$size.png" -w "$size" -h "$size" logo.svg > /dev/null 2> /dev/null
files+=("$size.png")
done
convert "${files[@]}" -colors 256 favicon.ico
unlink "${files[@]}"
Aqui logo.svg
representa a imagem de entrada (fonte), a partir do qual podemos criar arquivos menores dos tamanhos desejados ( 16.png
, 32.png
, etc.) que, em seguida, combinam para o arquivo de ícone de saída (resultado), favicon.ico
. Você pode alterar a lista de tamanhos na linha 3, por exemplo, para "16 24 32 48 64 72 128", e o convert
comando se adaptará automaticamente de acordo, pois esse script usa a técnica descrita por G-Man em sua resposta aqui para criar um matriz de nomes de arquivos. E finalmente desvinculamos (removemos) os arquivos PNG criados na linha 4, usando a matriz de nomes de arquivos novamente.
Eu notei que o comando:
convert logo.svg -define icon:auto-resize=16,48,256 -compress zip favicon.ico
(equivalente à apresentada na resposta do usuário400747 ), na verdade, a imagem de bitmap em escala (qualidade perdida) e a transparência perdida das camadas em segundo plano.
convert
sempre que olho para ele. Obrigado pela resposta!