Aquí está la respuesta aceptada por Rob W , con una adaptación trivial para evitar tener que escribir los tamaños (16, 32, etc.) más de una 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[@]}"
Aquí logo.svg
representa la imagen de entrada (fuente), a partir del cual se crea archivos más pequeños de los tamaños deseados ( 16.png
, 32.png
, etc.) que luego se combinan en el archivo de icono de salida (resultado), favicon.ico
. Puede cambiar la lista de tamaños en la línea 3, por ejemplo, a "16 24 32 48 64 72 128", y el convert
comando se adaptará automáticamente en consecuencia, porque este script utiliza la técnica descrita por G-Man en su respuesta aquí para construir un matriz de nombres de archivo. Y finalmente, desvinculamos (eliminamos) los archivos PNG creados en la línea 4, utilizando nuevamente la matriz de nombres de archivos.
He notado que el comando:
convert logo.svg -define icon:auto-resize=16,48,256 -compress zip favicon.ico
(equivalente al que se presenta en la respuesta del usuario 400747 ) en realidad escaló la imagen de mapa de bits (calidad perdida) y las capas de fondo perdieron transparencia.
convert
cada vez que lo veo. ¡Gracias por la respuesta!