2015-07-22 24 views
5

假设我想将图像的透明背景变成白色(变平png): 简单的谷歌搜索将我指向: convert -flatten image.png noTransparency.png。 这工作正常,如果我从命令行调用imageMagick。 但是,让我们说我想用.NET包装magick.net做同样的事情。 Google和magick.net的文档对于这种情况都不是很有帮助。如何使用Magick.net将ImageMagick命令映射到.net代码

同样的事情 convert original.png +transparent "#E6B15A" singleColor.png 发生(一种创建只包含从原来的特定颜色的新形象) 使用magick.NET包装我无法找到任何方式做到这一点

为什么是很难映射imageMagick命令到.net代码使用magick.net?

有什么办法可以使用magick.net来执行imageMagick脚本吗? 我可以很容易地创建一个cmd过程从.net和从那里调用imageMagick命令,但如果有一个包装它必须是由于某种原因... 是否有任何良好和广泛的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。你可以在这里寻求有关InverseOpaque的帮助:https://magick.codeplex.com/discussions – dlemstra

+0

为了澄清,创建画布并使图像变平的示例完全符合我的要求,而且我不是OP。 :) @dlemstra – bzlm

相关问题