假设我想把一张图片的透明背景变成白色(flatten a png):一个简单的谷歌搜索指向我:convert -flatten image.png noTransparency.png
。如果我从命令行调用imageMagick,就可以正常工作。但是假设我想使用。net包装器magick.net来做同样的事情。对于这种情况,Google和magick.net的文档都不是很有帮助。
同样的事情发生在convert original.png +transparent "#E6B15A" singleColor.png
(一种创建新图像的方法,只包含原始图像的特定颜色)我找不到任何使用魔法的方法。净包装
为什么使用magick.net将imageMagick命令映射到.net代码中如此困难??
是否有任何方法我可以使用magick.net执行imageMagick脚本代替?我可以很容易地从。net创建一个cmd进程,并从那里调用imageMagick命令,但如果有一个包装器,它必须出于某种原因…有什么好的和广泛的magick.net文档,我错过了吗?
很抱歉,目前没有详细的文档版本。我只创建了几个例子,并将它们记录在网站上。我没有时间和团队去创造更多更好的文件。但是我可以帮你回答这两个问题。
convert -flatten image.png noTransparency.png
实际上应该这样写:
convert image.png -flatten noTransparency.png
首先读取image.png
,然后将其扁平化并写入noTransparency.png
。但是在ImageMagick中,它"秘密地"添加了另一个与image.png
大小相同的图像,并使用它来平坦image.png
。你可以在Magick中这样写。净:
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)一起翻译,因为还不支持+transparent。
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.