imagemagick: wie Sie die Hintergrundfarbe des Bildes mit Anti-Aliasing ändern

1493
dengApro

Fuchs

Ich möchte nur den Fuchs behalten. Das heißt, die weiße Hintergrundfarbe des Bildes wird mit Imagemagick transparent.

Das Anti-Aliasing ist hartnäckig, der Bildrand ist sägezahnförmig.

Ich habe es ausprobiert.

Hier ist der Code:

convert fox.jpeg -alpha set -channel RGBA \ -fill none -opaque white fox_one.jpeg   convert fox.jpeg -matte -fill none \ -draw 'color 0,0 replace' fox_two.jpeg 

Beide sind damit gescheitert

imagemagick: wie Sie die Hintergrundfarbe des Bildes mit Anti-Aliasing ändern

Ich habe es nach color_basics / # ersetzt .

Irgendwelche genaueren Dokumente empfohlen? Und wie kann ich das beheben?

1

1 Antwort auf die Frage

1
Anaksunaman

Unglücklicherweise gibt es im Gegensatz zu Ihrer vorherigen Frage zu Symbolen viele Möglichkeiten, die Hintergrundentfernung mit komplexeren Bildern zu erreichen. Daher gibt es möglicherweise keine "gute" Lösung. Für das von Ihnen gepostete Beispiel sind hier einige Ansätze, die möglicherweise zufriedenstellender sind.


Obwohl ich unten meine Vorschläge gebe, gibt es wahrscheinlich viel bessere Möglichkeiten, Dinge zu tun, von denen ich derzeit nichts weiß. Bitte verzeihen Sie Fehler, Auslassungen oder Dinge, die ich übersehen habe. =)


Einfache einfarbige Transparenz

Um eine einzelne Farbe (z. B. Hintergrund) in transparent umzuwandeln, können Sie Folgendes verwenden:

convert fox.jpg -transparent white fox_transparent.png 

Dies führt jedoch zu den gleichen Ergebnissen wie Ihr schlechtes Bild, was unerwünscht ist:

Ex. fox_transparent

fox_transparent_nofuzz

Dies ist darauf zurückzuführen, dass die Bereiche in Weiß (oben) nicht wirklich weiß sind (sie sind weißlich, hauptsächlich aufgrund von Anti-Aliasing, wie Sie bemerkt haben). Um dies zu beheben, können Sie mit -fuzz fast (fast) weiße Pixel auswählen :

convert fox.jpg -fuzz 11% -transparent white fox_transparent_fuzzed.png 

Dies führt zu besseren Ergebnissen:

Ex. fox_transparent_fuzzed

fox_transparent_fuzzed


Bessere Kanten (?)

Eine einfache Verwendung von -fuzzkann zwar gut funktionieren, kann jedoch unerwünschte Rauheiten aufweisen:

Ex. fox_transparent_fuzzed - Ecken und Kanten

fox_transparent_fuzzed_jaggies

Um dieses Problem zu beheben, können Sie eine verwischte Maske verwenden, um die Kanten des Bildes weicher zu gestalten. Um dies in einem Schritt zu tun, können wir etwas Code aus diesem Forumbeitrag entnehmen und wie folgt verwenden:

convert fox.jpg ( -clone 0 -fuzz 11% -transparent white -blur 0x1 ) -compose copy_opacity -composite fox_transparent_fuzzed_blurry_mask.png 

Dieser Befehl erstellt eine unscharfe Maske, die dann mit dem Originalbild zusammengesetzt wird. Das ist das Ergebnis:

Ex. fox_transparent_fuzzed_blurry_mask

fox_transparent_fuzzed_blurry_mask

Sie können sehen, dass die Kanten jetzt weicher sind:

fox_transparent_fuzzed_nojaggies

Bei Bedarf können wir etwas Ähnliches in zwei Schritten machen:

convert fox.jpg -type Grayscale -negate -fill white -fuzz 11% +opaque "#000000" -blur 0x1 fox_blur_mask.jpg convert fox.jpg fox_blur_mask.jpg -compose copy_opacity -composite fox_transparent_blur_mask_result.png 

Der erste Befehl:

  • Erstellt eine Schwarzweißversion des Bildes ( -type Grayscale).

  • Invertiert (effektiv) die Farben für Maskierungszwecke ( -negate ).

  • Verwendet -fill white -fuzz 11% +opaque "#000000", um den Kopf des Fuchses mit Weiß zu füllen (damit wir den Großteil des Originalbildes sehen können).

  • Fügt -blur 0x1dem Bild ein Licht hinzu .

Dies ist die erzeugte Maske, wobei im endgültigen Bild alles in Schwarz transparent wird:

Ex. fox_blur_mask

fox_blur_mask

Der zweite Befehl kombiniert einfach das Originalbild und die Maske, um dieses Ergebnis zu erhalten:

Ex. fox_transparent_blur_mask_result

fox_transparent_blur_mask_result

Sie werden feststellen, dass das Ergebnis fast identisch mit dem zuvor angegebenen Beispiel ist:

fox_transparent_fuzzed_blurry_mask fox_transparent_blur_mask_result


Vorsichtsmaßnahmen

  • Wie bereits erwähnt, sind die Vorschläge nicht die einzigen Möglichkeiten, Dinge zu erreichen, und es gibt möglicherweise alternative / bessere Versionen der Befehle.

  • In diesen Beispielen wird davon ausgegangen, dass das Originalbild nicht transparent ist. In diesem Fall müssen Sie möglicherweise andere Optionen / Befehle verwenden. Ebenso wurden diese Vorschläge nur mit .jpg-Dateien als Eingabeformat und .png-Dateien als Ausgabeformat getestet.

  • Der grundlegende Nachteil -fuzzist, dass eine konsistente Anwendung schwierig ist. -fuzz 11%funktioniert am besten für das Beispielbild. -fuzz 10%oder fuzz 12%würde wahrscheinlich unerwünschte Streupixel zurücklassen. Andere -fuzzWerte werden wahrscheinlich für andere Bilder benötigt.

  • Diese Vorschläge beziehen sich nicht auf Ansätze, um bestimmte Teile eines Bildes beizubehalten, die dieselbe Farbe wie der Hintergrund haben (z. B. die weißen Augen des Fuchses). Dazu möchten Sie wahrscheinlich entweder A) die Maske im letzten Beispiel ändern oder B) wenn Sie etwas wie das zweite Beispiel von oben wünschen, verwenden Sie z

    convert fox.jpg -bordercolor white -border 1x1 -fuzz 11% -fill none -floodfill +0+0 white -shave 1x1 fox_flood_2_minimal.png 
  • Beachten Sie, dass der obige Befehl aus dem bereits bereitgestellten Maskierungslink kopiert wurde .

Ganz zufrieden Ich bin ein iOS-Entwickler. Ich möchte OX kennen, besonders OS X. Also versuche ich etwas Intuitives. Ich weiß nicht, wie man Fragen stellt, wie zum Beispiel ein Profi oder richtig. dengApro vor 6 Jahren 0
Neugier ist ein bewundernswertes Merkmal, denke ich. Jemand wird nie die richtigen Fragen kennen, wenn er gar nicht fragt. =) Ich bin jedenfalls froh, dass dies hilfreich war. Viel Glück! =) Anaksunaman vor 6 Jahren 1