【问题标题】:Remove white Background in the image still has white edges c#删除图像中的白色背景仍然有白色边缘c#
【发布时间】:2023-03-28 10:43:01
【问题描述】:

我正在尝试编写可以从jpeg-images 中删除白色background 的代码,可以将它们保存为相同的格式。

到目前为止,这是我的代码:

string imgPath = Server.MapPath("~/App_Files/" + Profile.CompanyName + "/Temp/test.jpg");
Bitmap bmp = RADBase.ImageHandler.LoadImage(imgPath);
bmp.MakeTransparent(Color.White);
System.Drawing.Imaging.ImageFormat format = new System.Drawing.Imaging.ImageFormat(Guid.NewGuid());
bmp.Save(imgPath, format);

它会移除白色背景,但图像上仍有白色边缘。不确定如何去除整个白色背景?

图片如下: http://cyphernet.co.za/bg-test/CGU3-black.jpg

结果如下: http://cyphernet.co.za/bg-test/test.jpg

【问题讨论】:

  • 您只需删除一种白色FFFFFF(RGB 值),但也有其他颜色看起来是白色且它们的RGB 值不同,例如FFFFFE
  • 这绝对不容易,而且我认为 Stack Overflow 几乎没有...不过,请参阅这些问题+答案:stackoverflow.com/questions/5875035/…stackoverflow.com/questions/2898050/…
  • 感谢@Fuzzi59 的建议,我将在下面尝试一下您的解决方案,看看效果如何。会在那里给你反馈。

标签: c# asp.net image image-processing bitmap


【解决方案1】:

一种方法是创建一系列颜色,这些颜色看起来是白色的,并检查每个像素是否为“白色”。然后可以将这些像素设置为Color.Transparent:

string imgPath = Server.MapPath("~/App_Files/" + Profile.CompanyName + "/Temp/test.jpg");
Bitmap source = new Bitmap(imgPath);
source.MakeTransparent();
for (int x = 0; x < source.Width; x++)
{
    for (int y = 0; y < source.Height; y++)
    {
        Color currentColor = source.GetPixel(x, y);
        if (currentColor.R >= 220 && currentColor.G >= 220 && currentColor.B >= 220)
        {
            source.SetPixel(x, y, Color.Transparent);
        }
    }
}
source.Save(imgPath);

这是一个粗略的解决方案,因为很难说一种颜色是否为白色。也许你必须调整范围以获得更好的结果。 还有一点就是有些颜色的T恤看起来是白色的,所以这些也是透明的。

【讨论】:

    【解决方案2】:

    您应该清理所有白色类别,您可以在链接下方查看类别。您尤其可以看到灰色和白色类别(灰色类别 = gri kategorisi,白色类别 = beyaz 类别)。您可以使用 RBG 值移除颜色。

    Here Categories

    【讨论】: