使用 Magick.NET 拉伸图像以填充透明背景

Strech image to fill the transparent background using Magick.NET

我有一张图片(已附上)。

我希望图片被拉伸以覆盖黄色区域。

我正在使用 C#,magick.net

最好的方法是什么?

我提出以下方法:

  1. 读取输入图像保存原始大小
  2. 使用trim删除透明*区域
  3. 将(现在变小的)图像拉伸到原始大小

*如果示例图像中的黄色区域实际上是透明的,您可以在以下代码中保留 fuzz = 0,否则您必须调整该值以确保删除所有不需要的区域。

string srcImageFullPath = "c:\input.png";
int fuzz = 0;
string destImageFullPath = "c:\output.png";

// Read image from file
using (MagickImage image = new MagickImage(srcImageFullPath))
{
    //save height/width of the original image
    int height = image.Page.Height;
    int width = image.Page.Width;

    //set fuzz percentage
    image.ColorFuzz = new ImageMagick.Percentage(fuzz);

    //trim borders
    image.Trim();

    //resize image to original size
    MagickGeometry size = new MagickGeometry(width, height);
    size.IgnoreAspectRatio = true;
    image.Resize(size);

    // Save the result
    image.Write(destImageFullPath);
}

下图中左边是原图,右边是调整后的图:

备注

  1. Trim 删除任何与图像角落像素颜色相同的边框(有关详细信息,请参阅 here
  2. 由于示例图片中的黄色边框不是由单一颜色构成的,因此您可以使用 Fuzz 删除 "similar" 颜色(更多信息 here)。如前所述,如果您的边框是透明的,请离开 fuzz = 0