在Java中从四个边自动裁剪图像白色边框

时间:2016-03-30 10:46:44

标签: java image-processing java-io javax.imageio

Sample Image

我想要裁剪所有四个侧面的空白区域。 在java中从图像中自动裁剪白色边框的最简单方法?提前谢谢......

public class TrimWhite {

    public class TrimWhite {
        private BufferedImage img;

        public TrimWhite(File input) {
            try {
                img = ImageIO.read(input);
            } catch (IOException e) {
                throw new RuntimeException( "Problem reading image", e );
            }
        }

        public void trim() {
            int width  = getTrimmedWidth();
            int height = getTrimmedHeight();

            BufferedImage newImg = new BufferedImage(width, height,
                    BufferedImage.TYPE_INT_RGB);
            Graphics g = newImg.createGraphics();
            g.drawImage( img, 0, 0, null );
            img = newImg;
        }

        public void write(File f) {
            try {
                ImageIO.write(img, "bmp", f);
            } catch (IOException e) {
                throw new RuntimeException( "Problem writing image", e );
            }
        }

        private int getTrimmedWidth() {
            int height       = this.img.getHeight();
            int width        = this.img.getWidth();
            int trimmedWidth = 0;

            for(int i = 0; i < height; i++) {
                for(int j = width - 1; j >= 0; j--) {
                    if(img.getRGB(j, i) != Color.WHITE.getRGB() &&
                            j > trimmedWidth) {
                        trimmedWidth = j;
                        break;
                    }
                }
            }

            return trimmedWidth;
        }

        private int getTrimmedHeight() {
            int width         = this.img.getWidth();
            int height        = this.img.getHeight();
            int trimmedHeight = 0;

            for(int i = 0; i < width; i++) {
                for(int j = height - 1; j >= 0; j--) {
                    if(img.getRGB(i, j) != Color.WHITE.getRGB() &&
                            j > trimmedHeight) {
                        trimmedHeight = j;
                        break;
                    }
                }
            }

            return trimmedHeight;
        }

    public static void main(String[] args) {



        TrimWhite trim = new TrimWhite(new File("C:\\Users\\Administrator\\Desktop\\New folder (2)\\Untitled.png"));
        trim.trim();
        trim.write(new File("C:\\Users\\Administrator\\Desktop\\New folder (2)\\test.png"));
    }
}
}

Output

我希望输出必须裁剪所有四个边的白色空间请帮忙!

0 个答案:

没有答案