2015-07-22 14 views
5

Bir görüntünün saydam arka planını beyaza dönüştürmek istediğimi varsayalım (png'yi düzleştirin): Basit bir google araması beni şu adrese yönlendiriyor: convert -flatten image.png noTransparency.png. Bu, imageMagick'i komut satırından çağırırsam iyi çalışır. Ancak, aynı şeyi yapmak için .NET sarıcı magick.net'u kullanmak istediğimi varsayalım. Ne Google ne de magick.net'in dokümantasyonu bu durum için çok yararlı değildir.Nasıl Magick.net kullanarak .net kodu için ImageMagick komutlarını eşleştirin

Aynı şey magick.NET sarmalayıcı kullanarak bunu yapmak için HERHANGİ yol bulamıyorum (orijinal sadece belirli bir renk içeren yeni bir görüntü oluşturmak için bir yol) convert original.png +transparent "#E6B15A" singleColor.png ile olur

Neden imageMagick komutlarını magick.net kullanarak .net koduna eşlemek çok mu zor?

imageMagick betiklerini yürütmek için magick.net'i kullanmanın bir yolu var mı? Kolayca bir cmd cmd İşlemi oluşturabilir ve oradan imageMagick komutlarını çağırabilirdim, ancak bir sarıcı varsa, bunun bir nedeni olmalı ... Herhangi bir iyi ve kapsamlı magick.net belgesi var mı eksik?

cevap

6

Üzgünüm, ancak şu anda mevcut olan belgelerin geniş bir sürümü bulunmamaktadır. Sadece birkaç örnek oluşturdum ve web sitesinde bunları belgeledim. Daha fazla ve daha iyi dokümantasyon oluşturmak için zamanım/ekibim yok. Ama her iki sorunun cevabında size yardımcı olabilirim.

convert -flatten image.png noTransparency.png

Bu

aslında böyle yazılmalıdır:

convert image.png -flatten noTransparency.png

İlk image.png okunur ve daha sonra düzleştirilmiş ve noTransparency.png yazılır. Ama ImageMagick'de 'gizlice' image.png ile aynı boyuta sahip başka bir resim ekler ve image.png'u düzleştirmek için bunu kullanır. (7.0.0.0016)

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

Ve Diğer örnek geçerli sürümü ile tercüme edilemez:

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

Ama aynı zamanda şöyle yazabiliriz: Sen Magick.NET bu gibi yazabilirsiniz çünkü + saydam henüz desteklenmiyor. Bir sonraki versiyonda

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

bunu yapmak mümkün olacaktır:

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

Ama şimdilik bu şekilde yapabilirsiniz:

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

Ve hep sorabilir Daha fazla yardım için burada: https://magick.codeplex.com/discussions.

+0

Benim için "MagickImageCollection" + 'Flatten 'örneği harika çalışıyor. 'InverseTransparent' örneği henüz mevcut değildir ve' InverseOpaque 'örneği tamamen beyaz bir görüntü üretir. – bzlm

+1

InverseTransparent yöntemini eklemeyi tamamen unutmuşum gibi görünüyor. Bunun için bir sorun oluşturdum: https://magick.codeplex.com/workitem/1365. Burada InverseOpaque hakkında yardım isteyebilirsiniz: https://magick.codeplex.com/discussions – dlemstra

+0

Sadece açıklamak gerekirse, bir tuval oluşturan ve görüntüleri tam olarak istediğim gibi düzleştiren ve ben OP değilim. :) @dlemstra – bzlm

İlgili konular