2015-07-22 19 views
5

Angenommen, ich möchte den transparenten Hintergrund eines Bildes in Weiß umwandeln (flatten ein PNG): Eine einfache Google-Suche verweist mich auf: convert -flatten image.png noTransparency.png. Das funktioniert gut, wenn ich ImageMagick von der Befehlszeile aufrufen. Aber sagen wir, ich möchte den .NET Wrapper magick.net verwenden, um das Gleiche zu tun. Weder Google noch die Dokumentation von magick.net sind für diesen Fall sehr hilfreich.Wie man ImageMagick-Befehle mit .net-Code unter Verwendung von Magick.net abbildet

Gleiche passiert mit convert original.png +transparent "#E6B15A" singleColor.png (einem Weg, ein neues Bild zu erstellen, die nur eine bestimmte Farbe aus dem Original enthält) Ich kann keine Art und Weise, dies zu tun mit dem magick.NET Wrapper

finden Warum ist so schwer zu ImageMagick Befehle in .net Code mit magick.net?

Gibt es eine Möglichkeit, magick.net zum Ausführen von imageMagick-Skripten zu verwenden? Ich könnte einfach einen cmd Prozess von .net erstellen und imageMagick Befehle von dort aufrufen, aber wenn es einen Wrapper gibt, muss es aus irgendeinem Grund sein ... Gibt es eine gute und umfangreiche magick.net Dokumentation, die ich bin fehlt?

Antwort

6

Es tut mir leid, aber es gibt derzeit keine umfangreiche Version der Dokumentation. Ich habe nur ein paar Beispiele erstellt und diese auf der Website dokumentiert. Ich habe nicht die Zeit/das Team, um mehr und bessere Dokumentation zu erstellen. Aber ich kann dir bei der Antwort auf beide Fragen helfen.

convert image.png -flatten noTransparency.png

Erste image.png gelesen und dann wird es abgeflacht und noTransparency.png geschrieben:

convert -flatten image.png noTransparency.png

tatsächlich wie dies Dies sollte geschrieben werden. Aber in ImageMagick fügt es "heimlich" ein anderes Bild hinzu, das die gleiche Größe wie image.png hat und verwendet, um image.png zu glätten. Sie können es so in Magick.NET schreiben:

using (MagickImageCollection images = new MagickImageCollection()) 
{ 
    MagickImage imagePng = new MagickImage("image.png"); 

    // 'add background' 
    MagickImage background = new MagickImage(imagePng.BackgroundColor, imagePng.Width, imagePng.Height); 
    images.Add(background); 

    // image.png 
    images.Add(imagePng); 

    // +flatten 
    using (MagickImage result = images.Flatten()) 
    { 
    // noTransparency.png 
    result.Write("noTransparency.png"); 
    } 
} 

Aber man kann es auch so schreiben:

using (MagickImage imagePng = new MagickImage("image.png")) 
{ 
    imagePng.ColorAlpha(imagePngg.BackgroundColor); 
    result.Write("noTransparency.png"); 
} 

Und Ihr anderes Beispiel kann nicht mit der aktuellen Version (7.0.0.0016) übersetzt werden weil + transparent noch nicht unterstützt wird.

convert original.png +transparent "#E6B15A" singleColor.png1

In der nächsten Version können Sie dies tun:

using (MagickImage original = new MagickImage("original.png")) 
{ 
    original.InverseTransparent(new MagickColor("#E6B15A")); 
    original.Write("singleColor.png"); 
} 

Aber man könnte es so jetzt tun:

using (MagickImage original = new MagickImage("original.png")) 
{ 
    original.InverseOpaque(new MagickColor("#E6B15A"), MagickColor.Transparent); 
    original.Write("singleColor.png"); 
} 

Und Sie können immer fragen Für weitere Hilfe hier: https://magick.codeplex.com/discussions.

+0

Für mich funktioniert das Beispiel 'MagickImageCollection' +' Flatten' sehr gut. Das 'InverseTransparent'-Beispiel ist noch nicht verfügbar, und das 'InverseOpaque'-Beispiel erzeugt ein vollständig weißes Bild. – bzlm

+1

Es scheint, ich habe völlig vergessen, die InverseTransparent-Methode hinzuzufügen. Ich habe ein Problem dafür erstellt: https://magick.codeplex.com/workitem/1365. Sie können hier nach Hilfe über InverseOpaque fragen: https://magick.codeplex.com/discussions – dlemstra

+0

Nur um zu verdeutlichen, das Beispiel, das eine Leinwand erstellt und die Bilder flacht macht genau das, was ich will, und ich bin nicht das OP. :) @dlemstra – bzlm