Wie konvertiere ich eine quadratische SVG-Datei in eine ICO-Datei aller Größen?

24

Ich habe in InkScape ein Symbol gezeichnet und möchte es in eine ICO-Datei exportieren, die Sprites für alle angemessenen Auflösungen (16x16, 32x32, ... 256x256 usw.) enthält. Wie kann das gemacht werden (ohne große und teure Software wie Photoshop, CorelDraw usw.)?

Ivan
quelle
2
Eine schnelle Suche zeigt mir, dass es keine Möglichkeit gibt, auch nur ein einziges ICO aus InkScape zu exportieren, aber es gibt viele Vorschläge, wie dies mit zusätzlicher, kostenloser Software wie GIMP geschehen kann. Haben Sie diese Optionen überprüft? Wenn sie nicht für Sie gearbeitet haben, können Sie sagen, warum nicht?
USR2564301
Bei @RadLexus habe ich eine Reihe von Online-Tools ausprobiert. Soweit ich das verstehen kann, sind alle Tools dazu gedacht, ICOns in einfacher Größe zu erstellen.
Ivan
5
Sie möchten wissen, wie Sie ICOs mit mehreren Größen erstellen können? Probieren Sie die Optionen in dieser Antwort zum Stapelüberlauf aus : stackoverflow.com/questions/4354617/… (erneut durch eine einfache Google-Abfrage gefunden ...).
USR2564301
1
Es gibt eine Inkscape-Erweiterung, die scheinbar als ICO- Datei exportiert wird, aber ich habe im Moment keine Zeit, um zu versuchen, ob sie funktioniert.
Paolo Gibellini
Wenn Sie eine der folgenden Antworten auf Ihre Frage gefunden haben, markieren Sie diese bitte als akzeptierte Antwort.
DᴀʀᴛʜVᴀᴅᴇʀ

Antworten:

24

Sie können ImageMagick sofort verwenden:

convert -density 384 icon.svg -define icon:auto-resize icon.ico
Heltonbiker
quelle
3
Warum diese Dichte?
Naught101
1
Ich weiß es nicht, ich habe es nur von einer anderen Stelle kopiert.
Heltonbiker
@ naught101 hier ist die Dokumentation für das Density-Flag - obwohl es anscheinend ein ziemlich unnötiger Schritt ist, es sei denn, Sie tun etwas sehr Spezifisches mit Bildgrößen, DPIs und der dazwischenliegenden Bildrasterung. imagemagick.org/script/command-line-options.php#density
CreationTribe
7
Verwenden Sie convert -background none icon.svg -define icon:auto-resize icon.icodiese Option , um den transparenten Hintergrund beizubehalten.
Robert Hume
2
magick convert -background none icon.svg -define icon:auto-resize icon.icoarbeitete für mich.
Intotecho
15

Eine Befehlszeilenlösung:

1) Exportieren Sie Ihre SVG nach PNG mit InkScape

2) Verändern Sie die Größe dieses PNG-Bildes mit ImageMagick auf die gewünschten Größen:

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) Konvertieren Sie die PNG-Bilder in ICO:

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

4) Stellen Sie sicher, dass Ihr ICO alles enthält:

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
quelle
Sie können auch eine einfache Batch- oder Shell-Datei verwenden, um die Arbeit zu vereinfachen.
Paolo Gibellini
3
Wäre es nicht besser (wenn auch etwas komplizierter), die vielen PNG-Größen direkt aus SVG zu exportieren, anstatt die Größe bereits gerasterter PNGs zu ändern?
Heltonbiker
1
Nur für den Fall, dass jemand neugierig ist, ist das "..." nicht wörtlich. Es stellt andere PNG-Dateigrößen dar, die in die Datei favicon.ico gepackt werden sollen.
Nostalg.io
@ Nostalg.io Gute Bemerkung, danke! Ich habe die Antwort bearbeitet.
philippe_b
5

Bash-Version ...

#!/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

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

Benötigt: inkscape imagemagick optipng (optional) von Ihrem Paketmanager.

Ich fand es einfacher, dies für die Bash-Shell neu zu erstellen, da Win10 und Inkscape nicht miteinander auskamen. Dies wurde im Windows-Subsystem für Linux getestet, sollte aber auch auf Mac funktionieren.

Verwenden Sie diese Referenz, um die Größen auszuwählen, die mir wichtig waren: https://github.com/audreyr/favicon-cheat-sheet . Passen Sie das sizeArray an Ihre spezifischen Anforderungen an.

Gary
quelle
4

Ich würde diesen Ansatz vorschlagen:

1) Erstellen Sie ein Skript, um die SVG-Datei in eine beliebige Größe zu exportieren. Ich habe dieses .bat-Skript codiert, um ein Android-Symbol zu erstellen

@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

HINWEIS :

  • Das definierte % inkscape% var sollte Ihrem Inkscape-Installationspfad entsprechen
  • Das Skript gibt alle Exportbefehle in eine temporäre Datei zurück, um den inkscape-Prozess besser verwalten zu können. Der cli-Parameter "shell" akzeptiert mehr Befehle mit einer einzelnen Instanz, anstatt eine Instanz pro Befehl zu erzeugen.

Mit diesem Parameter ruft Inkscape einen interaktiven Befehlszeilen-Shell-Modus auf. In diesem Modus geben Sie Befehle an der Eingabeaufforderung ein und Inkscape führt sie aus, ohne dass Sie für jeden Befehl eine neue Kopie von Inkscape ausführen müssen. Diese Funktion ist vor allem für Skripterstellung und Serververwendung nützlich: Sie bietet keine neuen Funktionen, sondern ermöglicht es Ihnen, die Geschwindigkeit und den Speicherbedarf von Skripten zu verbessern, die Inkscape wiederholt aufrufen, um Befehlszeilenaufgaben (z. B. Exportieren oder Konvertieren) auszuführen. Jeder Befehl im Shell-Modus muss eine vollständig gültige Inkscape-Befehlszeile sein, jedoch ohne den Inkscape-Programmnamen, z. B. "file.svg --export-pdf = file.pdf". ( siehe inkscape Handbuch )

2) Fügen Sie dem obigen Skript die in philippe-b answer angegebene Konvertierungssyntax hinzu, mit der alle generierten PNGs zu einer einzigen ICO-Datei zusammengeführt werden

3) Entfernen Sie optional alle exportierten PNGs, da sie nicht mehr benötigt werden

Mattia Galati
quelle
1

Diese Website ist mein Ziel für die Erstellung von Favoriten, da sie für die meisten Geräte (Windows, MacOS, Android, iOS) die Symbole für den Bildschirm "Zu Startseite hinzufügen" enthält. Https://realfavicongenerator.net/

Brandito
quelle