Angenommen, Sie haben ein Bild (PNG oder JPG). Dieses Bild hat einen weißen Hintergrund und ich muss diesen Hintergrund transparent machen.
Ich habe mit diesen Beispielen versucht:
convert original.png -background none transparent.png
convert original.png -background white -flatten -alpha off transparent.png
aber ohne wünschenswerte Ergebnisse.
Wie kann ich es schaffen?
WICHTIG: Verwenden der convert
Befehlszeile.
png
imagemagick
alpha-transparency
Israel
quelle
quelle
convert original.png -transparent white new.png
aber wenn ich ihn versuche, kann ich ihn nicht zum Laufen bringen. Sind Sie sicher, dass Ihr Hintergrund tatsächlich weiß ist (#FFFFFF), oder ist er nur fast weiß (z. B. #FEFEFE)?Antworten:
Ich verwende ImageMagick 6.6.9-7 unter Ubuntu 12.04.
Was für mich funktioniert hat, war Folgendes:
Das hat das ganze Weiß in der test.png in transparent geändert.
quelle
Ich hatte das gleiche Problem. In dem ich mit ImageMagick den weißen Hintergrund aus dem JPG / PNG-Bildformat entfernen muss.
Was für mich funktioniert hat war:
1) Konvertieren Sie das Bildformat in PNG:
convert input.jpg input.png
2)
convert input.png -fuzz 2% -transparent white output.png
quelle
mogrify -format png -median 2 -fuzz 5% -transparent white ico_*.jpg
Lösung
Erläuterung
Dies ist etwas länger als die zuvor gegebenen einfachen Antworten, liefert jedoch viel bessere Ergebnisse: (1) Die Qualität ist aufgrund von Alpha mit Antialiasing überlegen, und (2) nur der Hintergrund wird entfernt, im Gegensatz zu einer einzelnen Farbe. ("Hintergrund" wird als ungefähr dieselbe Farbe wie das obere linke Pixel definiert, wobei eine Flutfüllung von den Bildrändern verwendet wird.)
Zusätzlich wird der Alphakanal um ein halbes Pixel erodiert, um Lichthöfe zu vermeiden. Natürlich funktionieren die morphologischen Operationen von ImageMagick (noch?) Nicht auf Subpixel-Ebene. Sie können also sehen, dass ich den Alphakanal vor dem Erodieren auf 200% sprenge.
Vergleich der Ergebnisse
Hier ist ein Vergleich des einfachen Ansatzes ("-fuzz 2% -transparent white") mit meiner Lösung, wenn er auf dem ImageMagick-Logo ausgeführt wird . Ich habe beide transparenten Bilder auf einen sattelbraunen Hintergrund abgeflacht, um die Unterschiede sichtbar zu machen (klicken Sie für Originale).
Beachten Sie, wie der Bart des Zauberers bei der einfachen Vorgehensweise verschwunden ist. Vergleichen Sie die Ränder des Assistenten, um zu sehen, wie sich die Figur durch Antialiasing-Alpha nahtlos in den Hintergrund einfügt.
Natürlich gebe ich zu, dass es Zeiten gibt, in denen Sie die einfachere Lösung verwenden möchten. (Zum Beispiel: Es ist verdammt viel einfacher, sich daran zu erinnern, und wenn Sie in GIF konvertieren, sind Sie sowieso auf 1-Bit-Alpha beschränkt.)
mktrans Shell-Skript
Da es unwahrscheinlich ist, dass Sie diesen Befehl wiederholt eingeben möchten, empfehle ich, ihn in ein Skript einzuschließen. Sie können ein BASH-Shell-Skript von github herunterladen , das meine vorgeschlagene Lösung ausführt. Es kann für mehrere Dateien in einem Verzeichnis ausgeführt werden und enthält hilfreiche Kommentare, falls Sie Änderungen vornehmen möchten.
bg_removal-Skript
Übrigens enthält ImageMagick tatsächlich ein Skript namens "bg_removal" , das Floodfill auf ähnliche Weise wie meine Lösung verwendet. Die Ergebnisse sind jedoch nicht großartig, da immer noch 1-Bit-Alpha verwendet wird. Außerdem läuft das Skript bg_removal langsamer und ist etwas schwieriger zu verwenden (Sie müssen zwei verschiedene Fuzz-Werte angeben). Hier ist ein Beispiel für die Ausgabe von bg_removal.
quelle
gimp
oder was auch immer machen möchte . :)Das funktioniert bei mir:
Je kleiner der Fuzz%, desto näher am echten Weiß oder umgekehrt, desto größer der%, desto mehr Abweichungen vom Weiß können transparent werden
quelle
mktrans
Shell-Skript: github.com/hackerb9/mktransSie können dies verwenden, um den Hintergrund transparent zu machen
Das Obige gibt dem Präfekten einen transparenten Hintergrund
quelle
()
:convert more-icon.png -gravity center -background 'rgba(0,0,0,0)' -extent 27x27 new-more-icon.png
Mit ImageMagick ist dies dem Hackerb9-Code und dem Ergebnis sehr ähnlich, jedoch eine etwas einfachere Befehlszeile. Es wird davon ausgegangen, dass das obere linke Pixel die Hintergrundfarbe ist. Ich fülle den Hintergrund einfach mit Transparenz, wähle dann den Alphakanal aus, verwische ihn und entferne die Hälfte des unscharfen Bereichs mit -x 50x100%. Schalten Sie dann alle Kanäle wieder ein und drücken Sie sie gegen die braune Farbe flach. Die -blur 0x1-Ebene 50x100% wirkt gegen die Grenzen der Alphakanaltransparenz. Sie können den Fuzz-Wert, die Unschärfemenge und den 50% -Wert anpassen, um den Grad des Antialiasing zu ändern.
quelle
Wenn Sie den Transparenzgrad steuern möchten, können Sie rgba verwenden. wo a das Alpha ist. 0 für transparent und 1 für undurchsichtig. Stellen Sie sicher, dass die endgültige Ausgabedatei aus Gründen der Transparenz die Erweiterung .png haben muss.
quelle
Ja. Hatte das gleiche Problem auch. Hier ist der Befehl, den ich ausgeführt habe und der perfekt funktioniert hat:
convert transparent-img1.png transparent-img2.png transparent-img3.png -channel Alpha favicon.ico
quelle