Вот Принятый ответ на Rob W , с тривиальной адаптацией , чтобы избежать необходимости набирать размеры (16, 32 и т.д.) больше , чем один раз:
#!/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[@]}"
Здесь logo.svg
представляет вход (источник) изображение, из которого мы создаем файлы меньшего размера желаемых размеров ( 16.png
, 32.png
и т.д.) , которые затем объединяются в файл значок выход (результат) favicon.ico
. Вы можете изменить список размеров в строке 3, например, на «16 24 32 48 64 72 128», и convert
команда автоматически адаптируется соответствующим образом, потому что этот сценарий использует технику, описанную G-Man в его ответе здесь, для построения массив имен файлов. И, наконец, мы отсоединяем (удаляем) файлы PNG, созданные в строке 4, снова используя массив имен файлов.
Я заметил, что команда:
convert logo.svg -define icon:auto-resize=16,48,256 -compress zip favicon.ico
(эквивалентно представленному в ответе пользователя 400747 ) фактически масштабированное растровое изображение (потеря качества) и фон слоев теряют прозрачность.
convert
каждый раз, когда смотрю на это. Спасибо за ответ!