Як перетворити квадратний SVG у всерозмірний ICO?


24

Я намалював піктограму в InkScape і хотів би експортувати її у файл ICO, який би містив спрайти для всіх розумних дозволів (16x16, 32x32, ... 256x256 тощо). Як це можна зробити (без використання величезного та дорогого програмного забезпечення, як Photoshop, CorelDraw тощо)?


2
Швидкий пошук говорить про те, що немає можливості експортувати навіть один ICO з InkScape, але є багато пропозицій щодо того, як це зробити за допомогою додаткового - безкоштовного - програмного забезпечення, такого як GIMP. Ви перевірили ці варіанти? Якщо вони не працювали на вас, можете сказати, чому ні?
usr2564301

@RadLexus те, що я спробував, - це ряд інструментів в Інтернеті, і всі вони, наскільки я зрозумів, означають створювати одноразові ICOns.
Іван

5
Отже, ви хочете знати, як створити ICO з декількома розмірами? Спробуйте параметри в цій відповіді на переповнення стека: stackoverflow.com/questions/4354617/… (знову знайдений простим запитом Google ...).
usr2564301

1
Існує розширення Inkscape, яке, здається, експортується як файл ico , але в даний момент у мене немає часу, щоб спробувати, чи працює він.
Paolo Gibellini

Якщо ви знайшли що-небудь із наведеного нижче, щоб відповісти на своє запитання, позначте його як прийняту відповідь.
DᴀʀᴛʜVᴀᴅᴇʀ

Відповіді:


24

Ви можете використовувати ImageMagick відразу:

convert -density 384 icon.svg -define icon:auto-resize icon.ico

3
Чому саме така щільність?
naught101

1
Я не знаю, я просто скопіював це з іншого місця.
heltonbiker

@ naught101 ось документація на прапор щільності - хоча, здається, це досить непотрібний крок, якщо ви не робите щось дуже специфічне з розмірами зображення, dpi та проміжною їх растерізацією. 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

Ви також можете використовувати простий пакетний файл або файл оболонки, щоб спростити роботу.
Paolo Gibellini

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масив під ваші конкретні потреби.


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. Параметр clip "shell" приймає більше команд, використовуючи один екземпляр, а не породив екземпляр на команду.

За допомогою цього параметра Inkscape перейде в режим інтерактивного оболонки командного рядка. У цьому режимі ви вводите команди підказки та Inkscape виконує їх, без того, щоб запускати нову копію Inkscape для кожної команди. Ця функція в основному корисна для сценаріїв та використання сервера: вона не додає нових можливостей, але дозволяє покращити вимоги до швидкості та пам’яті будь-якого сценарію, який неодноразово викликає Inkscape для виконання завдань командного рядка (наприклад, експорту або перетворення). Кожна команда в режимі оболонки повинна бути повним дійсним командним рядком Inkscape, але без назви програми Inkscape, наприклад, "file.svg --export-pdf = file.pdf". ( див. посібник з Inkscape )

2) Додайте до вищезазначеного сценарію конвертований синтаксис, зазначений у відповіді philippe-b, який об'єднує всі створені PNG в один файл ICO

3) За бажанням видаліть всі експортовані PNG, оскільки вони більше не потрібні


1

Цей веб-сайт є моїм переходом для покоління favicon, оскільки він містить піктограми для додавання на головний екран для більшості пристроїв (Windows, macOS, Android, iOS) https://realfavicongenerator.net/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.