Remove surrounding whitespace from an image

前端 未结 8 866
时光说笑
时光说笑 2020-12-02 15:54

I have a block of product images we received from a customer. Each product image is a picture of something and it was taken with a white background. I would like to crop a

8条回答
  •  无人及你
    2020-12-02 16:15

    public void TrimImage() {
        int threshhold = 250;
    
    
        int topOffset = 0;
        int bottomOffset = 0;
        int leftOffset = 0;
        int rightOffset = 0;
        Bitmap img = new Bitmap(@"e:\Temp\Trim_Blank_Image.png");
    
    
        bool foundColor = false;
        // Get left bounds to crop
        for (int x = 1; x < img.Width && foundColor == false; x++)
        {
            for (int y = 1; y < img.Height && foundColor == false; y++)
            {
                Color color = img.GetPixel(x, y);
                if (color.R < threshhold || color.G < threshhold || color.B < threshhold)
                    foundColor = true;
            }
            leftOffset += 1;
        }
    
    
        foundColor = false;
        // Get top bounds to crop
        for (int y = 1; y < img.Height && foundColor == false; y++)
        {
            for (int x = 1; x < img.Width && foundColor == false; x++)
            {
                Color color = img.GetPixel(x, y);
                if (color.R < threshhold || color.G < threshhold || color.B < threshhold)
                    foundColor = true;
            }
            topOffset += 1;
        }
    
    
        foundColor = false;
        // Get right bounds to crop
        for (int x = img.Width - 1; x >= 1 && foundColor == false; x--)
        {
            for (int y = 1; y < img.Height && foundColor == false; y++)
            {
                Color color = img.GetPixel(x, y);
                if (color.R < threshhold || color.G < threshhold || color.B < threshhold)
                    foundColor = true;
            }
            rightOffset += 1;
        }
    
    
        foundColor = false;
        // Get bottom bounds to crop
        for (int y = img.Height - 1; y >= 1 && foundColor == false; y--)
        {
            for (int x = 1; x < img.Width && foundColor == false; x++)
            {
                Color color = img.GetPixel(x, y);
                if (color.R < threshhold || color.G < threshhold || color.B < threshhold)
                    foundColor = true;
            }
            bottomOffset += 1;
        }
    
    
        // Create a new image set to the size of the original minus the white space
        //Bitmap newImg = new Bitmap(img.Width - leftOffset - rightOffset, img.Height - topOffset - bottomOffset);
    
        Bitmap croppedBitmap = new Bitmap(img);
        croppedBitmap = croppedBitmap.Clone(
                        new Rectangle(leftOffset - 3, topOffset - 3, img.Width - leftOffset - rightOffset + 6, img.Height - topOffset - bottomOffset + 6),
                        System.Drawing.Imaging.PixelFormat.DontCare);
    
    
        // Get a graphics object for the new bitmap, and draw the original bitmap onto it, offsetting it do remove the whitespace
        //Graphics g = Graphics.FromImage(croppedBitmap);
        //g.DrawImage(img, 1 - leftOffset, 1 - rightOffset);
        croppedBitmap.Save(@"e:\Temp\Trim_Blank_Image-crop.png", ImageFormat.Png);
    }
    

    I have got code from other post in ms, but that has bugs, I have changed something, now it works good.

    The post from http://msm2020-sc.blogspot.com/2013/07/c-crop-white-space-from-around-image.html

提交回复
热议问题