Как конвертировать квадратный SVG в полноразмерный ICO?

24

Я нарисовал значок в InkScape и хотел бы экспортировать его в файл ICO, который будет содержать спрайты для всех разумных разрешений (16x16, 32x32, ... 256x256 и т. Д.). Как это можно сделать (без использования огромного и дорогого программного обеспечения, такого как Photoshop, CorelDraw и т. Д.)?

Иван
источник
2
Быстрый поиск говорит мне, что нет способа экспортировать даже одну ICO из InkScape, но есть много предложений о том, как это сделать с помощью дополнительного бесплатного программного обеспечения, такого как GIMP. Вы проверяли эти варианты? Если они не работают на вас, можете ли вы сказать, почему нет?
usr2564301
@RadLexus, что я попробовал, - это ряд онлайн-инструментов, и все они, насколько я понимаю, означают создание однотипных ICO.
Иван
5
Итак, вы хотите знать, как создавать ICO нескольких размеров? Попробуйте варианты ответа в этом ответе «Переполнение стека»: stackoverflow.com/questions/4354617/… (опять же, найдено простым запросом Google ...).
usr2564301
1
Существует расширение Inkscape, которое, похоже, экспортируется как файл ico , но у меня нет времени, чтобы попробовать, работает ли оно.
Паоло Гибеллини,
Если вы нашли что-либо из нижеприведенного, чтобы ответить на ваш вопрос, отметьте его как принятый ответ.
DᴀʀᴛʜVᴀᴅᴇʀ

Ответы:

24

Вы можете использовать ImageMagick прямо сейчас:

convert -density 384 icon.svg -define icon:auto-resize icon.ico
heltonbiker
источник
3
Почему эта плотность?
naught101
1
Я не знаю, я просто скопировал это из другого места.
Хелтонбайкер
@ naught101 вот документация для флага плотности - хотя, кажется, это довольно ненужный шаг, если вы не делаете что-то очень специфическое с размерами изображения, точками на дюйм и их растеризацией промежуточного изображения. imagemagick.org/script/command-line-options.php#density
CreationTribe
7
Используйте, convert -background none icon.svg -define icon:auto-resize icon.icoчтобы сохранить прозрачный фон.
Роберт Хьюм
2
magick convert -background none icon.svg -define icon:auto-resize icon.icoработал на меня.
интехо
15

Решение командной строки:

1) Экспортируйте SVG в PNG с помощью InkScape

2) Измените размер этого PNG-изображения до требуемых размеров с помощью ImageMagick:

magick convert master.png -resize 16x16 16.png
magick convert master.png -resize 32x32 32.png
magick convert master.png -resize 48x48 48.png

3) Преобразовать изображения PNG в ICO:

magick convert 16.png 32.png 48.png icon.ico

4) Убедитесь, что ваша ICO содержит все:

identify icon.ico
icon.ico[1] ICO 16x16 16x16+0+0 32-bit sRGB 21.2KB 0.000u 0:00.000
icon.ico[0] ICO 32x32 32x32+0+0 32-bit sRGB 21.2KB 0.000u 0:00.000
icon.ico[0] ICO 48x48 48x48+0+0 32-bit sRGB 21.2KB 0.000u 0:00.000
philippe_b
источник
Вы также можете использовать простой пакетный или командный файл для упрощения работы.
Паоло Гибеллини,
3
Разве не было бы лучше (даже если немного сложнее) экспортировать многие размеры png напрямую из SVG вместо изменения размера уже растрированных PNG?
heltonbiker
1
На всякий случай, если кому-то еще интересно, «...» не является буквальным. Он представляет файлы других размеров png, чтобы втиснуть их в файл favicon.ico.
Nostalg.io
@ Nostalg.io Хорошее замечание, спасибо! Я отредактировал ответ.
philippe_b
5

Bash версия ...

#!/bin/bash

set -ex

svg=$1

size=(16 32 24 48 72 96 144 152 192 196)

echo Making bitmaps from your svg...

for i in ${size[@]}; do
  inkscape $svg --export-png="favicon-$i.png" -w$i -h$i --without-gui
done

echo Compressing...

## Replace with your favorite (e.g. pngquant)
# optipng -o7 favicon-*.png
pngquant -f --ext .png favicon-*.png --posterize 4 --speed 1

echo Converting to favicon.ico...

convert $(ls -v favicon-*.png) favicon.ico

## Clean-up maybe?
# rm favicon-*.png

echo Done

Использование: ./favicon.sh your-square-svg-file.svg

Требуется: inkscape imagemagick optipng (необязательно) от вашего менеджера пакетов.

Мне было проще воссоздать это для оболочки bash, поскольку Win10 и Inkscape не ладили. Это было протестировано в подсистеме Windows для Linux, но также должно работать на Mac.

Использовал эту ссылку, чтобы выбрать размеры, которые меня интересовали: https://github.com/audreyr/favicon-cheat-sheet . Настройте sizeмассив в соответствии с вашими потребностями.

Gary
источник
4

Я бы предложил этот подход:

1) создать скрипт для экспорта SVG в любой необходимый размер. Я написал этот скрипт .bat, чтобы помочь мне создать иконку Android

@echo off
set file="%~f1"
set path=%~dp1
set inkscape="C:\Program Files\Inkscape\inkscape.exe"

echo Le icone saranno salvate in %path%
echo Produzione icone applicative

echo %file% --export-png="%path%/ic32.png" -w32 -h32 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic48.png" -w48 -h48 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic72.png" -w72 -h72 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic96.png" -w96 -h96 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic144.png" -w144 -h144 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic192.png" -w192 -h192 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic512.png" -w512 -h512 > %~dp1/commands.txt
%inkscape% --shell < %~dp1/commands.txt
erase "%~dp1/commands.txt"

echo Procedura terminata

ПРИМЕЧАНИЕ :

  • определенный % inkscape% var должен соответствовать пути установки Inkscape
  • Сценарий выводит все команды экспорта во временный файл для лучшего управления процессом inkscape. Cli-параметр «shell» принимает больше команд, используя один экземпляр вместо вызова экземпляра для каждой команды.

С этим параметром Inkscape войдет в режим оболочки интерактивной командной строки. В этом режиме вы вводите команды в командной строке, и Inkscape выполняет их без необходимости запуска новой копии Inkscape для каждой команды. Эта функция в основном полезна для сценариев и использования сервера: она не добавляет новых возможностей, но позволяет вам улучшить требования к скорости и памяти для любого сценария, который постоянно вызывает Inkscape для выполнения задач командной строки (таких как экспорт или преобразования). Каждая команда в режиме оболочки должна представлять собой полную действительную командную строку Inkscape, но без имени программы Inkscape, например, «file.svg --export-pdf = file.pdf». ( см. руководство по inkscape )

2) Добавьте к приведенному выше сценарию синтаксис преобразования, указанный в ответе philippe-b, который объединяет все сгенерированные PNG в один файл ICO.

3) При желании удалите все экспортированные PNG, поскольку они больше не нужны

Маттиа Галац
источник
1

Этот веб-сайт предназначен для создания фавиконов, поскольку он включает значки для «Добавить на главный экран» для большинства устройств (Windows, macOS, Android, iOS) https://realfavicongenerator.net/

Brandito
источник