Wie kann ich einen Ordner mit .pngs in .jpgs konvertieren, während ich die Hintergrundfarbe einstelle?

10

Ich habe einen Ordner mit PNG-Dateien mit transparentem Hintergrund. Ich möchte sie über die Befehlszeile konvertieren und die transparenten Hintergründe der Bilder beibehalten.

Ich würde mich über jede Hilfe freuen.

Da JPGs keine Transparenz unterstützen, wie kann ich den Hex-Wert der Hintergrundfarbe des Ausgabe-JPGs angeben? Im Moment ist es standardmäßig #ffffff? Ich habe dieses Skript ausprobiert, aber es gibt den Ausgabe-JPGs weiße Hintergründe:

mogrify -quality 100 -format jpg *.png

Aktualisieren

Ich habe diese PNG-Dateien in Inkscape erstellt. Ich sollte erwähnen, dass mein Ziel bei der Konvertierung dieser PNGs in JPGs darin besteht, gezackte Kanten auf kreisförmigen oder eckigen Objekten zu entfernen. Die PNGs haben derzeit gezackte Kanten und ich habe gelesen, dass das Konvertieren in JPGs dieses Problem lösen könnte. Das Konvertieren mit der in der Antwort von Christian Skjødt beschriebenen Methode führt jedoch zu noch schlechteren gezackten Kanten. Gibt es eine Möglichkeit, die PNGs in JPG zu konvertieren und auch Anti-Aliasing oder eine andere Technik zu verwenden, um die gezackten Kanten zu entfernen? Danke für die Hilfe.

James
quelle
3
Es ist ziemlich schwierig, Ihre Frage zu beantworten, wenn sie sich ständig ändert ... Zum späteren Nachschlagen: Versuchen Sie, das, was Sie erreichen möchten, von Anfang an in Ihre Frage aufzunehmen. Zu Ihrem "Update 2": Ist die "Zackigkeit" einfach ein Ergebnis Ihrer gewählten Auflösung? Was ist, wenn Sie die Auflösung erhöhen (die DPI-Nummer im Dialogfeld "Bitmap exportieren ...")?
Marcel Stimberg

Antworten:

3

Um die Kanten zu glätten, können Sie PNGs erstellen, die 10x größer als Ihre Zielgröße sind, und dann die Größe mit Anti-Aliasing auf JPG ändern. Ich habe dies mit Python und der Python Imaging Library erfolgreich gemacht, bin mir aber nicht sicher, wie ich es mit anderen Tools machen soll.

brousch
quelle
28

Das JPEG-Format unterstützt keine Transparenz. Daher ist es nicht möglich, die transparenten Hintergründe beizubehalten, wenn Sie das JPEG-Format verwenden möchten (oder müssen). In Wikipedia finden Sie eine Übersicht über die Funktionen verschiedener Bildformate.

Beachten Sie, dass JPEG 2000 zwar Transparenz unterstützt, dies jedoch weitaus seltener ist als das JPEG-Format. Es hängt von Ihrem Anwendungsfall ab, ob dies eine praktikable Alternative ist.

Marcel Stimberg
quelle
Ich kann mich irren, aber das OP fragt nach der Einstellung, auf welche Farbe transparente Bereiche gemacht werden. Sie werden weiß gemacht, aber das OP könnte zum Beispiel blau verwenden.
Stellen Sie Monica wieder her - ζ--
16

Zu Ihrer zweiten Frage:

Um die Hintergrundfarbe beim Konvertieren Ihrer Bilder festzulegen, können Sie die folgende -fillOption verwenden:

mogrify -quality 100 -format jpg -fill "#FF0000" -opaque none *.png

Die Verwendung -backgroundliefert ähnliche Ergebnisse. Vergiss das nicht -opaque none.

Christian Skjødt
quelle
Hey, danke für die Hilfe. Gibt es eine Möglichkeit, das Ausgabe-JPEG über diesen Befehl zu antialiasieren? Weitere Informationen finden Sie in Update 2 oben. Vielen Dank.
James
4

Es tut mir leid, dass das jpegFormat auf keinen Fall unterstützt wird, alpha channelsodass Sie keine Transparenz haben können.

Herr Shunz
quelle
0

Je nachdem, was Sie mit dem Bild tun möchten, kann der Alphakanal möglicherweise einem separaten Graustufenbild oder einer Bitmaske zugewiesen werden. Das Programm, das das Bild verwendet, wendet das Hilfsbild als durchscheinende / transparente Werte an . Obwohl es letztendlich besser ist, das Programm so zu ändern, dass es Alpha-PNG unterstützt.

Lie Ryan
quelle