6

假设我想将图像的透明背景转换为白色(将 png 展平):一个简单的谷歌搜索将我指向: convert -flatten image.png noTransparency.png. 如果我从命令行调用 imageMagick,这可以正常工作。但是假设我想使用 .NET 包装器magick.net来做同样的事情。Google 和 magick.net 的文档对于这种情况都不是很有帮助。

发生同样的事情 convert original.png +transparent "#E6B15A" singleColor.png (一种创建仅包含原始特定颜色的新图像的方法)我找不到使用magick.NET包装器的任何方法

为什么使用magick.net 将imageMagick 命令映射到.net代码如此困难?

有什么方法可以使用 magick.net 来执行 imageMagick 脚本吗?我可以轻松地从 .net 创建一个cmd进程并从那里调用 imageMagick 命令,但如果有一个包装器,它一定是出于某种原因......我是否缺少任何好的和广泛的 magick.net 文档?

4

1 回答 1

9

很抱歉,目前没有可用的文档的扩展版本。我只创建了几个示例并将它们记录在网站上。我没有时间/团队来创建更多更好的文档。但我可以帮你回答这两个问题。

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)翻译,因为尚不支持 +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 。

于 2015-07-23T12:02:49.850 回答