Jak przekonwertować kwadratowy plik SVG na pełnowymiarowy ICO?

24

Narysowałem ikonę w InkScape i chciałbym wyeksportować ją do pliku ICO, który zawierałby duszki dla wszystkich rozsądnych rozdzielczości (16x16, 32x32, ... 256x256 itp.). Jak można to zrobić (bez użycia ogromnego i drogiego oprogramowania, takiego jak Photoshop, CorelDraw itp.)?

Ivan
źródło
2
Szybkie wyszukiwanie mówi mi, że nie ma możliwości wyeksportowania nawet jednego ICO z InkScape, ale istnieje wiele sugestii, jak to zrobić za pomocą dodatkowego - bezpłatnego - oprogramowania, takiego jak GIMP. Czy sprawdziłeś te opcje? Jeśli ci się nie udało, możesz powiedzieć, dlaczego nie?
usr2564301,
@RadLexus to, czego próbowałem, to szereg narzędzi internetowych i wszystkie, o ile mogłem zrozumieć, oznaczają tworzenie pojedynczych ICOns.
Ivan
5
Chcesz wiedzieć, jak tworzyć ICO o wielu rozmiarach? Wypróbuj opcje zawarte w tej odpowiedzi Przepełnienie stosu: stackoverflow.com/questions/4354617/… (ponownie, znaleziony przez proste zapytanie Google ...).
usr2564301,
1
Istnieje rozszerzenie Inkscape, które wydaje się eksportować jako plik ico , ale w tej chwili nie mam czasu, aby spróbować, czy to działa.
Paolo Gibellini,
Jeśli znalazłeś którykolwiek z poniższych pytań, aby odpowiedzieć na swoje pytanie, oznacz je jako zaakceptowaną odpowiedź.
DᴀʀᴛʜVᴀᴅᴇʀ

Odpowiedzi:

24

Możesz od razu użyć ImageMagick :

convert -density 384 icon.svg -define icon:auto-resize icon.ico
heltonbiker
źródło
3
Skąd ta gęstość?
naught101
1
Nie wiem, po prostu skopiowałem to z innego miejsca.
heltonbiker
@ naught101 tutaj jest dokumentacja flagi gęstości - chociaż wydaje się, że jest to raczej niepotrzebny krok, chyba że robisz coś bardzo konkretnego z rozmiarami obrazu, dpi i ich pośrednią rasteryzacją obrazu. imagemagick.org/script/command-line-options.php#density
CreationTribe
7
Użyj, convert -background none icon.svg -define icon:auto-resize icon.icoaby zachować przezroczyste tło.
Robert Hume
2
magick convert -background none icon.svg -define icon:auto-resize icon.icopracował dla mnie.
intotecho
15

Rozwiązanie wiersza poleceń:

1) Eksportuj SVG do PNG za pomocą InkScape

2) Zmień rozmiar tego obrazu PNG do żądanych rozmiarów za pomocą 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) Konwertuj obrazy PNG do ICO:

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

4) Upewnij się, że Twoje ICO zawiera wszystko:

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
źródło
Możesz również użyć prostego pliku wsadowego lub powłoki, aby uprościć pracę.
Paolo Gibellini,
3
Czy nie byłoby lepiej (nawet trochę bardziej skomplikowane) eksportować wiele rozmiarów png bezpośrednio z SVG zamiast zmieniać rozmiar już zrasteryzowanych plików PNG?
heltonbiker
1
Na wypadek, gdyby ktokolwiek był ciekawy, „...” nie jest dosłowne. Reprezentuje inne rozmiary plików png, które można wcisnąć do pliku favicon.ico.
Nostalg.io,
@ Nostalg.io Dobra uwaga, dzięki! Zredagowałem odpowiedź.
philippe_b
5

Wersja 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

Stosowanie: ./favicon.sh your-square-svg-file.svg

Wymaga: inkscape imagemagick optipng (opcjonalnie) od menedżera pakietów.

Znalazłem łatwiej odtworzyć to dla powłoki bash, ponieważ Win10 i Inkscape nie dogadywali się. Zostało to przetestowane w podsystemie Windows dla systemu Linux, ale powinno również działać na komputerach Mac.

Skorzystałem z tego odniesienia, aby wybrać rozmiary, na których mi zależało: https://github.com/audreyr/favicon-cheat-sheet . Dostosuj sizetablicę do swoich konkretnych potrzeb.

Gary
źródło
4

Sugerowałbym takie podejście:

1) Utwórz skrypt, aby wyeksportować SVG do dowolnego wymaganego rozmiaru. Zakodowałem ten skrypt .bat, aby pomóc mi stworzyć ikonę Androida

@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

UWAGA :

  • zdefiniowany % inkscape% var powinien być odpowiedni do ścieżki instalacji Inkscape
  • skrypt echa wszystkich poleceń eksportu do pliku tymczasowego, aby lepiej zarządzać procesem inkscape. Parametr cli „shell” akceptuje więcej poleceń za pomocą jednej instancji zamiast odradzać instancję na komendę.

Za pomocą tego parametru Inkscape przejdzie w tryb powłoki interaktywnego wiersza poleceń. W tym trybie wpisujesz polecenia w wierszu polecenia, a Inkscape je wykonuje, bez konieczności uruchamiania nowej kopii Inkscape dla każdego polecenia. Ta funkcja jest szczególnie przydatna w przypadku skryptów i zastosowań serwerowych: nie dodaje żadnych nowych możliwości, ale pozwala poprawić wymagania dotyczące szybkości i pamięci dowolnego skryptu, który wielokrotnie wywołuje Inkscape w celu wykonywania zadań wiersza poleceń (takich jak eksport lub konwersje). Każde polecenie w trybie powłoki musi być kompletnym prawidłowym wierszem polecenia Inkscape, ale bez nazwy programu Inkscape, na przykład „file.svg --export-pdf = plik.pdf”. ( patrz instrukcja Inkscape )

2) Dodaj do powyższego skryptu składnię konwersji podaną w odpowiedzi philippe-b, która łączy wszystkie wygenerowane pliki PNG w jeden plik ICO

3) Opcjonalnie usuń wszystkie eksportowane pliki PNG, ponieważ nie są już potrzebne

Mattia Galati
źródło
1

Ta strona jest moim miejscem do generowania favicon, ponieważ zawiera ikony Dodaj do ekranu głównego dla większości urządzeń (Windows, macOS, Android, iOS) https://realfavicongenerator.net/

Brandito
źródło