Ось Прийнятий відповідь на 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
(еквівалентно представленому у відповіді user400747 ) насправді масштабоване зображення растрового зображення (втрачена якість), а шари фону втрачають прозорість.
convert
кожного разу, коли я заглядаю. Дякую за відповідь!