有时候项目中会对图片进行操作,像切图啦,二值化啦,灰度啦。。

在验证码识别的时候很有用

现在将java对图片操作的部分方法写下来

 不管图片如何操作,关键是在new BufferImage 时候的 TYPE

BufferedImage.TYPE_BYTE_GRAY  是灰度化

BufferedImage.TYPE_BYTE_BINARY 是二值化

BufferedImage.TYPE_INT_ARGB ........

详细参数介绍如下:


java 对图片进行切割,灰度化,切割操作_二值化

 

(1) 将地址转换为BufferImage



public static BufferedImage console(String imgUrl) {
        BufferedImage img = null;
        try {
            if (imgUrl.startsWith("http:")) {
                img = ImageIO.read(new URL(imgUrl));
            } else {
                img = ImageIO.read(new File(imgUrl));
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

         return img;
    }


 (2) 图片的灰度化:


public static void huiDuHua(BufferedImage img) {
        int sWight = img.getWidth();
        int sHight = img.getHeight();
        BufferedImage newImage = new BufferedImage(sWight, sHight,
                BufferedImage.TYPE_BYTE_GRAY);
        for (int x = 0; x < sWight; x++) {
            for (int y = 0; y < sHight; y++) {
                int rgb= img.getRGB(x, y);
                newImage.setRGB(x, y, rgb);
            }
        }
         try {
            ImageIO.write(newImage, "jpg", new File("aa.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }  
        
    }


(3) 图片二值化



public static void erZhiHua(BufferedImage img) {
        int sWight = img.getWidth();
        int sHight = img.getHeight();
        BufferedImage newImage = new BufferedImage(sWight, sHight,
                BufferedImage.TYPE_BYTE_BINARY);
        for (int x = 0; x < sWight; x++) {
            for (int y = 0; y < sHight; y++) {
                int rgb= img.getRGB(x, y);
                newImage.setRGB(x, y, rgb);
            }
        }
         try {
            ImageIO.write(newImage, "jpg", new File("bb.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }  
        
    }



(4)图片切割


public static BufferedImage cat(int x, int y, int wight, int hight,
            BufferedImage img) {
        int[] simgRgb = new int[wight * hight];
        img.getRGB(x, y, wight, hight, simgRgb, 0, wight);
        BufferedImage newImage = new BufferedImage(wight, hight,
                BufferedImage.TYPE_INT_ARGB);
        newImage.setRGB(0, 0, wight, hight, simgRgb, 0, wight);
//         try {
//                ImageIO.write(newImage, "PNG", new File("aa.png"));
//            } catch (IOException e) {
//                // TODO Auto-generated catch block
//                e.printStackTrace();
//            }  
        return newImage;
    }


java 对图片进行切割,灰度化,切割操作_二值化_02