Wie kann ich ImageMagick ermöglichen, ein Graustufen-PNG fehlerfrei in eine ICO-Datei zu konvertieren?

Wie kann ich ImageMagick ermöglichen, ein Graustufen-PNG fehlerfrei in eine ICO-Datei zu konvertieren?

Ich habe ein Graustufen-PNG und wenn ich versuche, ImageMagick (Version 7.1.1-28) zu verwenden, umErstellen Sie eine ICO-Dateies gibt mir immer die folgende Warnung:

$ convert favicon.png -define icon:auto-resize=16,32,48,64,256 favicon.ico
convert: Cannot write image with defined png:bit-depth or png:color-type. `' @ warning/png.c/MagickPNGWarningHandler/1526.

Ich dachte, es könnte am Farbprofil meines Original-PNG liegen, also habe ich versucht, das Bild mit ImageMagick (vielleicht ist meine Annahme hier falsch?) zuerst in einen RGB-Farbraum zu zwingen und dann aus dieser Zwischendatei die ICO-Datei zu erstellen, aber ich bekam genau denselben Fehler.

$ convert favicon.png +profile "*" -colorspace RGB ico-temp.png
$ convert ico-temp.png -define icon:auto-resize=16,32,48,64,256 favicon.ico
convert: Cannot write image with defined png:bit-depth or png:color-type. `' @ warning/png.c/MagickPNGWarningHandler/1526.

Was mache ich hier falsch? Gibt es Flags, die ich hinzufügen könnte, damit das funktioniert?


Und für alle, die es reproduzieren möchten: Ich stelle fest, dass bei jeder Graustufen-SVG oder PNG, die in eine ICO-Datei konvertiert wird, dieser Fehler auftritt. Dies ist ein Beispiel-SVG, das ich erstellt habe, um dies zu reproduzieren (funktioniert auch, wenn Sie es mit dieser Quelle in ein PNG konvertieren):

<svg xmlns="http://www.w3.org/2000/svg" 
    width="100mm" 
    height="100mm" 
    viewBox="0 0 100 100">
  <circle cx="25" cy="75" r="20" style="fill:#ccc"/>
  <circle cx="65" cy="35" r="30" style="fill:#4d4d4d"/>
</svg>

Antwort1

Ich denke, die Lösung zu verwenden -compress nonealshier erklärt; getestet in meiner Installation von ImageMagick 7.1.1-28 auf macOS:

convert favicon.png -compress none -define icon:auto-resize=16,32,48,64,256 favicon.ico

Wenn ich das mit Ihrem Beispiel mache und favicon.svges in konvertiere favicon.png, wird sauber und favicon.icoohne Probleme ein erstellt.

Bildbeschreibung hier eingeben


Weitere Versuche unten.

Wie wäre es mit dem hier vorgeschlagenendiese Antwort:

convert -background transparent "favicon.png" -define icon:auto-resize=16,24,32,48,64,72,96,128,256 "favicon.ico"

Oder vielleicht der Vorschlag, -define profile:skip=ICCalshier vorgeschlagenmit -background transparent:

convert -background transparent "favicon.png" -define profile:skip=ICC -define icon:auto-resize=16,24,32,48,64,72,96,128,256 "favicon.ico"

Oder ohne -background transparent:

convert "favicon.png" -define profile:skip=ICC -define icon:auto-resize=16,24,32,48,64,72,96,128,256 "favicon.ico"

verwandte Informationen