Wie binde ich mehrere Größen in eine ICO-Datei ein?

16

Ich habe .ico-Symbole mit unterschiedlichen Bildern für mehrere Größen gesehen, z. 16x16, 32x32, 48x48, 128x128, 256x256. Wie kann ich unter Windows eine Symboldatei erstellen, die auf diese Weise mehrere Größen unterstützt, sofern für jede Größe bereits ICO-Dateien vorhanden sind? Bitte beachten Sie, dass ich hoffe, dass ich dies für mehr als 200 Dateien tun kann. Daher wäre es ideal, dies von cmd aus zu tun.

Suchipi
quelle

Antworten:

28

ImageMagick (Windows / Mac / Linux) enthält ein Befehlszeilentool convert, das für viele Zwecke verwendet werden kann, einschließlich des Packens mehrerer Bilder in einem Symbol:

convert 16.png 32.png 48.png 128.png 256.png -colors 256 icon.ico

Der vorherige Befehl nimmt 5 PNG-Bilder auf und kombiniert sie zu einer einzigen ICO-Datei.

Im Gegensatz zu den anderen Antworten kann diese Methode problemlos in Stapelskripten verwendet werden, um automatisch mehrere Symboldateien zu generieren. In einem meiner Projekte habe ich ein einzelnes Vektorbild (SVG) und benutze Inkscape , um PNGs in verschiedenen Größen zu generieren, gefolgt von convertder Erstellung eines Symbolcontainers. Dies ist ein reduziertes Beispiel (in einem Bash-Skript):

#!/bin/bash
for size in 16 32 48 128 256; do
    inkscape -z -e $size.png -w $size -h $size icon.svg >/dev/null 2>/dev/null
done
convert 16.png 32.png 48.png 128.png 256.png -colors 256 icon.ico
Rob W
quelle
1
Mann, ich habe das Gefühl, dass ich convertjedes Mal, wenn ich es mir anschaue , einen neuen Weg lerne, ImageMagick zu verwenden . Danke für die Antwort!
Suchipi
Wie machst du das Gegenteil? A .icoin mehrere PNGs konvertieren, basierend auf den enthaltenen Größen?
Flimm
2
@Flimm convert favicon.ico favicon.pngerzeugt favicon-0.png, favicon-1.pngusw. für jedes Symbol in dem Rahmen. Wenn Sie die Abmessungen des Bildes kennen möchten, verwenden Sie den identifyBefehl in der PNG-Datei.
Rob W
Sie können convert <icon.png> -resize 64x64statt inkscape auch imagemagicks own verwenden
kumarharsh
Ich -dither Nonehabe den Befehl convert hinzugefügt , weil die Standardkonvertierung in 256 Farben meinem Symbol Rauschen
James Roth,
7

Besserer Befehl für ImageMagick:

convert in.jpg -define icon:auto-resize=16,48,256 -compress zip out.ico

quelle
1
Dies ist eine großartige Antwort. Verwenden Sie diesen Befehl, um zu testen, ob die Datei tatsächlich konvertiert wurde:identify out.ico
kumarharsh
5

Sie können dies kostenlos in GIMP tun . Es gibt kurze Anweisungen, dies zu tun hier .

Zitieren:

  1. Öffne dein Bild in Gimp
  2. Machen Sie Ihre Leinwand quadratisch
  3. Passen Sie die Größe Ihrer Ebene an das Bild an
  4. Skalieren Sie die Ebene auf die größte Größe in Ihrer ICO-Datei, z. B. 64 Pixel
  5. Dupliziere die Ebene
  6. Skaliere die duplizierte Ebene auf die nächste Größe
  7. Duplizieren / skalieren Sie für alle Größen, die Sie in Ihrer ICO-Datei haben möchten
  8. Speichern Sie als .ico

In Ihrem Fall können Sie entweder mit dem größten Bild beginnen und für jedes duplizierte Bild verkleinern oder einfach neue Ebenen hinzufügen und die gewünschten Symbolbilder in diese Ebene importieren.

Techturtle
quelle
Wie unterstützt man mit dieser Methode mehrere Farbtiefen?
Random832
Ich kann nicht sagen, dass ich das persönlich machen musste, aber dieser Beitrag besagt, dass GIMP beim Speichern einen Farbeinstellungsdialog für jede Ebene öffnen sollte.
Techturtle
Sie müssen sich für den Export in Gimp 2.8.16 entscheiden, aber Jahre später kann ich bestätigen, dass es einen Dialog für Farbeinstellungen gibt, wenn Sie das ico exportieren.
Broots Waymb
1

Hier ist die akzeptierte Antwort von Rob W mit einer trivialen Anpassung, um zu vermeiden, dass die Größen (16, 32 usw.) mehrmals eingegeben werden müssen:

#!/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[@]}"

Hier logo.svgstellt den Eingang (Quelle) Bild, von dem uns kleinere Dateien der gewünschten Größen erstellen ( 16.png, 32.pngusw.) , die wir dann in die Ausgabe (Ergebnis) Symboldatei kombinieren, favicon.ico. Sie können die Liste der Größen in Zeile 3 ändern, z. B. in "16 24 32 48 64 72 128", und der convertBefehl wird automatisch entsprechend angepasst, da dieses Skript die von G-Man in seiner Antwort hier beschriebene Technik verwendet , um eine zu erstellen Array von Dateinamen. Zuletzt entfernen wir die in Zeile 4 erstellten PNG-Dateien und verwenden wieder das Array mit den Dateinamen.


Ich habe festgestellt, dass der Befehl:

convert logo.svg -define icon:auto-resize=16,48,256 -compress zip favicon.ico

(entspricht der in der Antwort von user400747 vorgestellten) Tatsächlich skaliertes Bitmap-Bild (verlorene Qualität) und verloren gegangene Transparenz des Ebenenhintergrunds .

Andris Petrams
quelle
1
(1) Sie haben im Wesentlichen die Antwort eines anderen kopiert. Wenn Sie das und nichts anderes tun würden (ja, die Leute tun das manchmal), würde ich Ihre Antwort zum Löschen markieren. Ich mache das nicht, weil du eine kleine Verbesserung gemacht hast. Wenn Sie jedoch die Arbeit einer anderen Person kopieren, sollten Sie den ursprünglichen Autor mit seinem Namen und einem Link zu den von Ihnen angegebenen Informationen angeben. (2) Sagen Sie bitte keine Dinge wie „das ist flexibler“, ohne zu erklären, was Sie meinen. … (Fortsetzung)
Scott
(Fortsetzung)… (3) Sie sollten immer Shell-Variablen angeben, es sei denn, Sie haben einen guten Grund, dies nicht zu tun , und Sie sind sicher , dass Sie wissen, was Sie tun. Von allen Beispielen, die ich für Skripte gesehen habe, die Shell-Variablen verwenden, ohne sie in Anführungszeichen zu setzen, gehören Ihre (dh die von Rob W ) möglicherweise zu den am wenigsten schlechten. Trotzdem ist es besser, die Variablen zu zitieren. (4) Warum verwenden Sie unlinkanstelle der häufigsten rm?
Scott
1

Windows-Batchdatei, mit der .PNGs in mehreren Größen erstellt und zu einer .ICO-Datei zusammengeführt werden:

@echo off

set inkScape="C:\SOFTWARE\GRAPHIC\INKSCAPE\inkscape.exe"
set imageMagick="C:\SOFTWARE\DEVELOPER\IMAGEMAGICK\magick.exe"
set fileName=favicon
set importType=svg
set exportType=png
set exportDpi=300
set imageSizes=(16 24 32 48 57 60 64 70 72 76 96 114 120 128 144 150 152 180 192 196 256 300 320 400 450 460 480 512 600)

for %%s in %imageSizes% do (
 %inkScape% -z -f %~dp0%fileName%.%importType% -w %%s -h %%s -e %~dp0%fileName%-%%sx%%s.%exportType% -d %exportDpi%
 echo CREATED: %fileName%-%%sx%%s.%exportType%
 set e=%fileName%-%%sx%%s.%exportType%
 call :concat (e)
)

%imageMagick% %exportFileNames%"%~dp0%fileName%.ico"
echo MERGED IN: %fileName%.ico

pause goto :eof


:concat (e) (
 set exportFileNames=%exportFileNames%"%~dp0%e%" 
)

Wenn Sie die .PNG-Dateien nicht benötigen, können Sie sie löschen (oder entfernen), indem del FILESie alle PNGs in einem Verzeichnis speichern, das Sie (nach %imageMagick% %exportFileNames%"%~dp0%fileName%.ico") entfernen können .

Hoffe es hilft jemandem. :)

Froschkoenig84
quelle
0

Ich bin der Meinung, dass Axialis IconMaker die beste Lösung für Symbolprobleme ist. Es gibt eine 30-Tage-Testversion, die das Problem wahrscheinlich für Sie lösen wird.

Ich benutze Axialis seit so vielen Jahren und bei so vielen Projekten, dass ich bezeugen kann, dass es sich um ein wirklich lohnendes Produkt handelt. Du brauchst keine 30 Tage! Ha!

Jerry Nixon
quelle
0

Sie müssen ein Symbolbearbeitungsprogramm eines Drittanbieters verwenden , da MSPaint nur ein Symbol pro Datei unterstützt. Es gibt ein paar von Threads hier mit Empfehlungen für die Symbol - Editoren, einige kostenlos, einige kommerzielle.

Sobald Sie sich für einen Symboleditor entschieden haben, variiert die Methode zum Hinzufügen von Symbolformaten, ist jedoch im Allgemeinen ähnlich (Sie klicken auf eine Schaltfläche oder wählen ein Menüelement aus, um ein neues Format hinzuzufügen). In den meisten Programmen können Sie eine Symboldatei importieren, wenn Sie ein Symbolformat / -größe hinzufügen. In den meisten Programmen können Sie jedoch auch ein neues Format / eine neue Größe aus dem vorhandenen Format erstellen, indem Sie die Größe ändern.

Wenn Sie beim Hinzufügen eines neuen Formats / einer neuen Größe die Option " Aus vorhandenem Format erstellen" auswählen, müssen Sie sicherstellen, dass Sie sie mit dem größten Symbolformat erstellen, das Ihnen bereits zur Verfügung steht, da es die meisten Daten für den Größenänderungsalgorithmus enthält . Stellen Sie außerdem sicher, dass Sie eine Version mit Transparenz verwenden, wenn Sie ein XP / Vista-Symbol erstellen, da die meisten Programme den Alphakanal nicht von Grund auf neu erstellen können.

Synetech
quelle
Ich muss das mit über 200 Icons machen. Kann irgendeiner dieser Icon-Editoren Dinge im Batch ausführen?
Suchipi
1
Ich kann mich nicht erinnern, jemals einen Icon-Editor im Batch-Modus gesehen zu haben. Sie könnten versuchen, einen Bildeditor im Batch-Modus zu verwenden, aber ich bin mir nicht sicher, ob Bildeditoren Unterstützung für Symbole mit mehreren Formaten bieten (zumindest nicht über die Befehlszeile / den Batch-Modus). Falls doch, wäre es ImageMagick. Außerdem sollten Sie der Frage die Anforderungen für das Volumen und den Batch-Modus hinzufügen.
Synetech
0

Vielleicht probierst du Matthias Benkmanns png2ico . Es ist kostenlos und kann mehrere PNGs in eine einzige ICO-Datei packen.

Dimitri C.
quelle
Es gibt jedoch einige interessante Einschränkungen:Width must be multiple of 8 and <256. Height must be <256.
Francois Botha