如何使用Magick.net将ImageMagick命令映射到.net代码



假设我想把一张图片的透明背景变成白色(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.

相关内容

  • 没有找到相关文章

最新更新