2009-12-16 9 views
6

Ich versuche, mit ImageMagick abgerundete Ecken zu meinen Bildern hinzuzufügen.Abgerundete Ecken mit ImageMagick (bakground transparent oder weiß)

Wenn das Eingabebild eine PNG- oder GIF-Datei ist, funktioniert mein Skript korrekt.

Aber wenn meine Eingabedatei eine JPEG-Datei ist, sind die Ecken schwarz. Ich würde gerne eine benutzerdefinierte Ecke Farbe in diesem Fall (z. B. weiß) irgendeine Idee?

Hier ist meine Arbeits Bash-Skript:

convert -size "$W"x"$H" xc:none -draw "roundrectangle 0,0,$W,$H,$R,$R" $MASK 
convert $SRC -matte $MASK -compose DstIn -composite $DST 

Parameter sind:

$ SRC: das Eingangsbild $ W: Breite des Eingangsbildes $ H: Höhe des Eingangsbildes $ MASK: das Maskenbild, das transparente Ecken enthält $ DST: das resultierende Bild mit abgerundeten Ecken.

Vielen Dank im Voraus.

Antwort

9

endlich eine Lösung gefunden:

convert -size "$W"x"$H" xc:none -draw "roundrectangle 0,0,$W,$H,$R,$R" $MASK 
convert $SRC -matte $MASK -compose DstIn -composite $TMP_PNG 

Ich bin eine "temp" PNG-Datei als Ziel verwenden. Wenn das Ausgabeformat nicht GIF oder PNG ist, verwende ich die "flatten" -Funktion von ImageMagick mit der weißen Farbe als Hintergrund.

convert $TMP_PNG -background white -flatten $DST 

Für die Ausgabe PNG: Kopieren Sie einfach $ TMP_PNG auf DST $

Für GIF Ausgabe: einfach konvertieren $ TMP_PNG bis $ DST

Else: glätten Sie das Bild, wie gesagt.

Hoffe, dass hilft.

+0

Hinweis für alle, die diese Antwort lesen: Wenn die temporäre Maskendatei '$ TMP_PNG' keine Dateierweiterung hat, die ihr Format identifiziert (z. B.' .png'), müssen Sie stattdessen die Variable mit der Datei voranstellen. So: 'png: $ TMP_PNG'. Auch 'canvas: none' ist die neue Art,' xc: none' zu ​​schreiben, obwohl letzteres immer noch funktioniert. – starfry