2012-11-13 28 views
6

Ich habe PNG-Dateien, die ich das ganze Bild halbtransparent konvertieren möchte. Das Bild wird in einer KML-Datei als Icon-Overlay zur Verwendung in Google Earth/Maps referenziert.Erstellen eines halbtransparenten PNG mit ImageMagick auf Centos Linux

Die folgenden Beispiele wurden mir mit dem Befehl ImageMagick convert vorgeschlagen, jedoch scheint keiner zu funktionieren. Das erste Beispiel führt zu einem Fehler, das zweite Beispiel kann keine beobachtbare Änderung am Bild vornehmen.

$ /usr/local/bin/convert 121112142121.png -channel Alpha -evaluate Set 50% 2121112142121.png 
convert: no decode delegate for this image format '121112142121.png' @ error/constitute.c/ReadImage/550. 
convert: option requires an argument '-evaluate' @ error/convert.c/ConvertImageCommand/1400. 

Die zweite vorgeschlagene Methode war:

convert filename.png -fill '#00000080' -draw 'matte 100,100 reset' output.png 

Während ich viele Beispiele auf dem Netz für die Erstellung von vollständig transparenten Bildern von bestimmten Farben oder Alphamasken finden kann, kann ich nicht scheinen zu finden, das funktioniert für das Erstellen halbtransparenter Bilder. Ich würde gerne einen Weg finden, dies mit dem Befehl convert oder mit ImageMagick Perl zu tun.

ImageMagick Version ist 6.8.0-4.

Antwort

12

Resolution wurde gefunden:

convert input.png -alpha set -channel A -evaluate set 50% output.png 

Der obige Befehl macht das gesamte Bild (alle Farben) halbtransparent.

Ein anderes Problem, das ich hatte, war, dass die neueste Version von ImageMagick aus der Quelle kompiliert wurde, ohne die neuesten Bildbibliotheken (insbesondere libpng) installiert zu haben. Achten Sie genau auf die Ausgabe von configure, um sicherzustellen, dass libpng beim Kompilieren aus der Quelle gefunden wird. Es scheint auch, dass Versionen von ImageMagick früher als 6.6 und/oder ältere Versionen von libpng keine transparente PNG-Generierung unterstützen.

+8

Sie können auch '-evaluate Divide 2' verwenden, wenn Sie diese vom Originalbild unabhängig machen möchten (verdoppeln Sie die Transparenz für alle Pixel). – caw

+6

Das Problem mit diesem Ansatz ist, dass, wenn Sie bereits vollständig transparente Pixel im Bild haben, ihre Transparenz zu ändern scheint, so dass sie halbtransparent schwarz :(Irgendwelche Ideen? –

0

Zu Tony Bogdanov Kommentar folgen. Wenn Sie bereits vollständig transparente Pixel haben können Sie die folgende Strategie verwenden:

1.) wandelt die transparenten Pixel in eine Maske

convert -alpha extract input.png mask.png

2.) führt den in der Antwort aufgeführten Befehl oben :

convert input.png -alpha on -channel a -evaluate set 65% output.png

3.)

eine leere Leinwand die gleiche Größe wie das Originalbild erstellen

Beispiel: convert -size 700x800 xc:none blankcanvas.png

4.) Verbund das halbtransparente Bild und die leere Leinwand zusammen, um die transparente Pixelmaske

composite output.png blankcanvas.png mask.png -compose Src final_output.png

4
convert input.png -alpha set -channel A -evaluate Divide 2 output.png 

Danke @caw für diesen Hinweis in Ihrem Kommentar verwenden. Dies hilft in dem Fall, in dem das Bild bereits einige transparente Pixel aufweist. -evaluate set 50% ruiniert die bereits transparenten Pixel, die Alpha 0 hatten, setzen ihr Alpha auf 50%, was oft nicht wünschenswert ist.

-evaluate Divide 2 bewahrt das Alpha, da vollständig transparente Pixel Alpha 0 sind und 0 geteilt durch 2 immer noch 0 ist.

Verwandte Themen