2015-07-22 4 views
5

का उपयोग कर कोड शुद्ध करने के लिए मान लीजिए कि मैं सफेद में एक छवि के पारदर्शी पृष्ठभूमि को बदलने के लिए चाहते हैं कमांड (एक png समतल): convert -flatten image.png noTransparency.png: एक सरल गूगल खोज मुझे के लिए कहते हैं। अगर मैं कमांड लाइन से छवि मैगिक का आह्वान करता हूं तो यह ठीक काम करता है। लेकिन मान लें कि मैं एक ही काम करने के लिए .NET wrapper magick.net का उपयोग करना चाहता हूं। न तो Google और न ही magick.net का दस्तावेज़ इस मामले के लिए बहुत उपयोगी है।कैसे मानचित्र ImageMagick Magick.net

यही बात (मूल से केवल एक विशिष्ट रंग वाली एक नई छवि बनाने के लिए एक तरह से) के साथ convert original.png +transparent "#E6B15A" singleColor.png होता है मैं किसी भी तरह यह करने के लिए magick.NET आवरण का उपयोग नहीं कर पा सकते हैं

क्यों imageMagick कमांड को में मैप करने के लिए इतना कठिन है .net magick.net का उपयोग कर कोड ??

क्या कोई तरीका है कि मैं मैजिकिक स्क्रिप्ट को निष्पादित करने के लिए magick.net का उपयोग कर सकता हूं? मैं आसानी से cmd प्रक्रिया से .NET और कॉल छवि मैकिक कमांड बना सकता हूं, लेकिन यदि कोई रैपर है तो यह किसी कारण से होना चाहिए ... क्या कोई अच्छा और व्यापक magick.net दस्तावेज है जो मैं हूं लापता?

उत्तर

6

मुझे खेद है लेकिन इस समय उपलब्ध दस्तावेज़ीकरण का कोई व्यापक संस्करण नहीं है। मैंने केवल कुछ उदाहरण बनाए हैं और उन्हें वेबसाइट पर दस्तावेज किया है। मेरे पास अधिक और बेहतर दस्तावेज बनाने के लिए समय/टीम नहीं है। लेकिन मैं दोनों सवालों के जवाब के साथ आपकी मदद कर सकता हूं।

convert -flatten image.png noTransparency.png

यह वास्तव में इस तरह लिखा जाना चाहिए:

convert image.png -flatten noTransparency.png

पहले image.png पढ़ा जाता है और फिर इसे चपटा और noTransparency.png लिखा है। लेकिन ImageMagick में यह 'गुप्त रूप से' एक और छवि जोड़ता है जिसमें image.png के समान आकार होता है और image.png को फ़्लैट करने के लिए इसका उपयोग करता है। आप 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"); 
    } 
} 

लेकिन क्या आप भी इस तरह यह लिख सकते हैं:

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

और अपने अन्य उदाहरण मौजूदा रिलीज के साथ नहीं किया जा सकता (7.0.0.0016) क्योंकि + पारदर्शी अभी तक समर्थित नहीं है।

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

अगले संस्करण में आप ऐसा करने में सक्षम हो जाएगा:

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

लेकिन अब आप के लिए इस तरह यह कर सकता है:

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

और तुम हमेशा पूछ सकते हैं अधिक सहायता के लिए यहां: https://magick.codeplex.com/discussions

+0

मेरे लिए, 'MagickImageCollection' +' Flatten' उदाहरण बहुत अच्छा काम करता है। 'InverseTransparent' उदाहरण अभी तक उपलब्ध नहीं है, और' InverseOpaque' उदाहरण पूरी तरह से सफेद छवि उत्पन्न करता है। – bzlm

+1

ऐसा लगता है कि मैं पूरी तरह से InverseTransparent विधि जोड़ने के लिए भूल गया। मैंने इसके लिए एक मुद्दा बनाया: https://magick.codeplex.com/workitem/1365। आप इनवर्सऑपेक के बारे में यहां मदद के लिए पूछ सकते हैं: https://magick.codeplex.com/discussions – dlemstra

+0

बस स्पष्ट करने के लिए, उदाहरण जो कैनवास बनाता है और छवियों को फ़्लैट करता है वही करता है जो मैं चाहता हूं, और मैं ओपी नहीं हूं। :) @dlemstra – bzlm