【问题标题】:Image resizing in Magick.Net在 Magick.Net 中调整图像大小
【发布时间】:2016-11-26 10:38:53
【问题描述】:

我正在尝试使用 Magick.Net 调整图像大小。但是我压缩的图像尺寸更大,位深度为 32,而原始图像的位深度为 2。我也想保留或减少位深度。 这是我的代码。

           var imageMacig = new MagickImage(filePath);
            //Percentage p = new Percentage(60);
            //imageMacig.Threshold(p); // 60 is OK 
            imageMacig.VirtualPixelMethod = VirtualPixelMethod.Transparent;
            imageMacig.Depth = 1;
            imageMacig.FilterType = FilterType.Quadratic;
            imageMacig.Transparent(MagickColor.FromRgb(0,0,0));
            imageMacig.Format = MagickFormat.Png00;
            imageMacig.Resize(newWidth, newHeight);
            imageMacig.Write(targetPath);
            imageMacig.Dispose();
            originalBMP.Dispose();

【问题讨论】:

  • 为什么你首先创建一些“图像”,然后从中创建“originalBMP”,然后再创建MagickImage?为什么不直接从文件创建 MagickImage?
  • 我在使用 MagickImage 之前尝试过其他方法。我首先使用 System.Drawing.Imaging 来调整大小,然后使用 MagickImage。
  • 所以首先尝试完全删除您的“图像”和“原始BMP”(以及与它们相关的所有内容)并从文件中构造MagickImage。
  • 我按照你说的做了,但有些图像是 1 位的,有些是 32 位的。你能告诉我如何保持图像透明吗?我似乎图像也不透明。
  • 如果您在删除不必要的东西后用代码更新您的问题会很好。如果您附加\添加指向您遇到问题的示例图像的链接,那就更好了。

标签: c# .net magick.net


【解决方案1】:

您获得了两种以上的颜色,因为您正在调整图像大小。这将添加一个 Alpha 通道,这将导致大量的半透明像素。如果要返回 2 种颜色,则应将图像的 ColorType 更改为 BiLevel。并将格式设置为 MagickFormat.Png8 将确保您的图像将被写入 2 位 png。以下是您如何做到这一点的示例:

using (var imageMagick = new MagickImage(filePath))
{
  imageMagick.Transparent(MagickColor.FromRgb(0,0,0));
  imageMagick.FilterType = FilterType.Quadratic;
  imageMagick.Resize(newWidth, newHeight);
  imageMagick.ColorType = ColorType.Bilevel;
  imageMagick.Format = MagickFormat.Png8;
  imageMagick.Write(targetPath);
}

【讨论】:

  • 感谢您的回复,但我得到的输出是黑白图像,而我的原始图像是彩色的。
猜你喜欢
  • 1970-01-01
  • 2013-08-21
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 2010-11-20
  • 1970-01-01
相关资源
最近更新 更多