it-swarm.com.de

Ersetzen Sie die Transparenz in PNG-Bildern durch weißen Hintergrund

Ich habe ein paar PNG-Bilder mit Transparenz, und ich muss Versionen erstellen, bei denen die Bildebene auf einem weißen Hintergrund erstellt wird. Ich habe mit Image Magick verschiedene "Convert" -Operationen ausprobiert, aber entweder passiert gar nichts oder ich bekomme einen Fehler. Ich möchte nicht zu einem JPG-Zwischenformular wechseln, da ich keine Artefakte haben möchte. Natürlich ist es einfach, dies in Gimp oder Photoshop oder was auch immer zu tun, aber ich schreibe es lieber von der Kommandozeile aus, weil es viele dieser Dinge gibt.

Ein Beispiel für einen nicht funktionierenden Image Magick-Befehl ist:

convert img1.png -background white -flatten img1-white.png

Das führt zu einem Fehler.

Vielen Dank!

239
Pointy

Das funktioniert für mich:

convert -flatten img1.png img1-white.png

Dokumentationsreferenzen:

204
remosu
-background white -alpha off

Beispiel:

convert image.png -background white -alpha off white.png

Fühlen Sie sich frei, white durch eine beliebige andere Farbe zu ersetzen. Die Imagemagick-Dokumentation sagt dies über die -alpha off-Operation aus:

Diese Operation ist einfach und schnell und erledigt die Arbeit, ohne dass __. Jegliche zusätzliche Speicherverwendung oder andere Nebenwirkungen, die möglicherweise in Zusammenhang stehen mit alternativen Techniken zum Entfernen der Transparenz. Es ist also die bevorzugte Methode zum Entfernen der Bildtransparenz.

293
Rok Kralj

Das Reduzieren des Bilds und das Anwenden des Hintergrundbildes ist in ImageMagick einfach

Die Reihenfolge der Befehle ist jedoch sehr wichtig

Um einen Hintergrund auf ein transparentes Bild anzuwenden und das Bild zu glätten, wenden Sie zuerst den Hintergrund und dann das Bild an. Das Gegenteil funktioniert nicht. 

$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png
44
acpmasquerade

Der einzige, der für mich funktionierte, war eine Mischung aller Antworten:

convert in.png -background white -alpha remove -flatten -alpha off out.png
21
db0

Die Verwendung von -flatten hat mich total verrückt gemacht, weil -flatten in Kombination mit mogrify-Ernte und Größenänderung einfach nicht funktioniert. Der offizielle und für mich einzige richtige Weg ist, den Alphakanal zu "entfernen".

-alpha remove -alpha off (wird bei JPG nicht benötigt)

Siehe Dokumentation: http://www.imagemagick.org/Usage/masking/#remove

10

so ersetzen Sie dasselbe Bild in allen Ordnern in einem Verzeichnis durch Weiß statt durchsichtig:

mogrify -background white -flatten */*.png

9
Julian

Der Abschnitt Alpha Remove des ImageMagick-Verwendungshandbuchs schlägt die Verwendung der Option -alpha remove vor, z.

convert in.png  -background white  -alpha remove  out.png

... mit der -background-Farbe Ihrer Wahl.

Der Leitfaden besagt:

Dieser Vorgang ist einfach und schnell und erledigt die Arbeit, ohne dass zusätzlicher Speicherverbrauch oder andere Nebenwirkungen erforderlich sind, die mit alternativen Techniken zum Entfernen der Transparenz verbunden sind. Dies ist der bevorzugte Weg, Bildtransparenz zu entfernen.

Es wird zusätzlich die Anmerkung hinzugefügt:

Beachten Sie, dass der Alphakanal eingeschaltet bleibt, während die Transparenz "entfernt" wird, jetzt aber völlig undurchsichtig ist. Wenn Sie den Alphakanal nicht mehr benötigen, können Sie ihn mit Alpha Off deaktivieren. 

Wenn Sie also keinen Alphakanal benötigen, können Sie die Größe des Ausgabebildes verringern, indem Sie die Option -alpha off hinzufügen. Beispiel:

convert in.png  -background white  -alpha remove  -alpha off  out.png

Weitere Informationen zu anderen, häufig verwendeten Techniken zum Entfernen von Transparenz finden Sie im Abschnitt Entfernen von Transparenz aus Bildern .

In diesem Abschnitt ist eine wichtige Einschränkung für die Verwendung von -flatten als Technik zum Entfernen von Transparenz erwähnt:

Dies funktioniert jedoch nicht mit "mogrify" oder mit einer Folge von mehreren Bildern, im Grunde, weil der Operator "-flatten" wirklich dazu gedacht ist, mehrere Bilder in einem einzigen Bild zusammenzuführen.

Wenn Sie also mehrere Bilder gleichzeitig konvertieren, z. Beim Erstellen von Miniaturbildern aus einer PDF - Datei wird -flatten nicht das tun, was Sie möchten (es reduziert alle Bilder für alle Seiten in ein Bild). Auf der anderen Seite werden bei Verwendung der -alpha remove-Technik immer noch mehrere Bilder erzeugt, von denen jedes die Transparenz entfernt hat.

6
Gary

Dies ist nicht genau die Antwort auf Ihre Frage, aber ich habe Ihre Frage gefunden, als ich versuchte herauszufinden, wie Sie den Alphakanal entfernen können. Daher habe ich beschlossen, diese Antwort hier hinzuzufügen:

Wenn Sie den Alphakanal mit Imagemagick entfernen möchten, können Sie diesen Befehl verwenden:

mogrify -alpha off ./*.png
5
FreeNickname

Es scheint, dass Ihr Befehl korrekt ist, sodass das Problem möglicherweise auf fehlende Unterstützung für PNG () zurückzuführen ist. Sie können dies mit convert -list configure überprüfen oder einfach Folgendes versuchen:

Sudo yum install libpng libpng-devel
5
Alastair

Welp, es sieht so aus, als ob meine Entscheidung, "Grafikmagick" über "ImageMagick" zu installieren, einige Ecken und Kanten hat - wenn ich echtes cruftiges altes "ImageMagick" neu installiere, funktioniert der obige Befehl perfekt.

edit , eine lange Zeit später - Eines Tages werde ich nachsehen, ob "Grafik-Magick" dieses Problem behoben hat. 

3
Pointy

Ich brauchte entweder: -alpha background und -flatten oder -fill.

Ich habe ein neues PNG mit transparentem Hintergrund und einem roten Punkt in der Mitte erstellt. 

convert image.png -background green -alpha off green.png ist fehlgeschlagen: Es wurde ein Bild mit schwarzem Hintergrund erzeugt

convert image.png -background green -alpha background -flatten green.png erzeugte ein Bild mit dem richtigen grünen Hintergrund.

Mit einer anderen Datei, die ich image.png umbenannte, konnte sie natürlich nichts tun. Für diese Datei habe ich festgestellt, dass die Farbe der transparenten Pixel "# d5d5d5" war, also habe ich diese Farbe mit Grün gefüllt:

convert image.png -fill green -opaque "#d5d5d5" green.png hat die transparenten Pixel durch das richtige Grün ersetzt.

2
McNulty

Um den Alphakanal tatsächlich aus der Datei zu entfernen, verwenden Sie die Option alpha off :

convert in.png -background white -alpha off out.png
0
Nick Dowell

Ich habe diese Frage und Antworten gesehen, die mir wirklich helfen, aber dann wurde ich für viele Dateien benötigt. Wenn Sie also mehrere Bilder (PNG-Bilder) in einem Ordner haben und dies für alle tun möchten:

find ./ -name "*.png" -exec convert {} -flatten {} \;
0
talsibony

Es ist -Alpha aus, NICHT -Alpha entfernen! Das Hochladen des iOS App Store schlägt fehl, wenn ein Symbol einen Alphakanal enthält !!

So gehen Sie vor: Mogrify -alpha off * .png

0
railsfanatic

dadurch entsteht ein Bild, bei dem nur das erste mit Transparenz über das zweite platziert wird

composite -gravity center ImgWithTransp.png BackgroundSameSizeOfImg.png ResultImg.png

fand den Tipp ursprünglich auf diesem Beitrag

0
Aquarius Power