2015-07-22 15 views
5

Diciamo che voglio trasformare lo sfondo trasparente di un'immagine in bianco (appiattito a png): Una semplice ricerca su google mi indica: convert -flatten image.png noTransparency.png. Funziona bene se invoco imageMagick dalla riga di comando. Ma supponiamo di voler utilizzare il wrapper .NET magick.net per fare la stessa cosa. Né Google né la documentazione di magick.net sono molto utili per questo caso.Come mappare i comandi ImageMagick al codice .net usando Magick.net

stessa cosa accade con convert original.png +transparent "#E6B15A" singleColor.png (un modo per creare una nuova immagine che contiene solo un colore specifico rispetto all'originale) non riesco a trovare un modo per farlo utilizzando l'involucro magick.NET

Perché è così difficile mappare i comandi imageMagick nel codice .net usando magick.net ??

È possibile utilizzare Magick.net per eseguire gli script imageMagick? Potrei facilmente creare un processo cmd da .net e chiamare i comandi imageMagick da lì, ma se c'è un wrapper deve essere per qualche motivo ... C'è qualche buona e ampia documentazione di magick.net che io sono mancante?

risposta

6

Mi dispiace ma non esiste una versione estesa della documentazione disponibile in questo momento. Ho creato solo un paio di esempi e li ho documentati sul sito web. Non ho tempo/team per creare una documentazione migliore e migliore. Ma posso aiutarti con la risposta ad entrambe le domande.

convert -flatten image.png noTransparency.png

Questo in realtà dovrebbe essere scritto in questo modo:

convert image.png -flatten noTransparency.png

Prima image.png viene letto e poi si è appiattita e scritti noTransparency.png. Ma in ImageMagick 'segretamente' aggiunge un'altra immagine che ha le stesse dimensioni di image.png e la usa per appiattire image.png. È possibile scrivere in questo modo in Magick.NET:

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"); 
    } 
} 

Ma si può anche scrivere in questo modo:

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

e gli altri esempio non può essere tradotto con la release corrente (7.0.0.0016) perché + transparent non è ancora supportato.

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

Nella prossima versione sarà in grado di fare questo:

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

Ma si potrebbe fare in questo modo, per ora:

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

E si può sempre chiedere per ulteriori informazioni qui: https://magick.codeplex.com/discussions.

+0

Per me, l'esempio 'MagickImageCollection' +' Flatten' funziona alla grande. L'esempio 'InverseTransparent' non è ancora disponibile e l'esempio' InverseOpaque' produce un'immagine completamente bianca. – bzlm

+1

Sembra che mi sia completamente dimenticato di aggiungere il metodo InverseTransparent. Ho creato un problema per questo: https://magick.codeplex.com/workitem/1365. Puoi chiedere aiuto su InverseOpaque qui: https://magick.codeplex.com/discussions – dlemstra

+0

Giusto per chiarire, l'esempio che crea una tela e appiattisce le immagini fa esattamente quello che voglio, e io non sono l'OP. :) @dlemstra – bzlm

Problemi correlati