利用Java处理图片,更换背景

这个是网上一个大牛想到的方法,独特的见解,适用于给证件照换背景,即颜色RGB值在一个范围内的图像处理,稍加修改,可以适用于一切需要更换背景的情况,可以利用NetBeans设计一个UI,然后写成一个小程序,将PS里的抠图取代。

import java.awt.image.BufferedImage; import java.io.File; import java.io.FileDescriptor; import java.io.FileNotFoundException; import java.io.FileOutputStream; import javax.imageio.ImageIO; public class ImageDemoBackGround { public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub /* * 待处理的图片 * */ File dir = new File("/Volumes/Function/G/test3/"); /* * 列出目录中的图片,得到数组 * */ File[] files = dir.listFiles(); /* * 遍历数组 * */ for (int x = 0; x < files.length; x++) { /* * 定义一个数组,存放RGB值 * */ int[] rgb = new int[3]; /* * byte转换BuffereImage * */ BufferedImage bImage = null; bImage = ImageIO.read(files[x]); int width = bImage.getWidth(); int height = bImage.getHeight(); int minx = bImage.getMinTileX(); int miny = bImage.getMinTileY(); System.out.println("正在处理..."+files[x].getName()); /* * 遍历像素点,判断是否更换颜色 * */ for (int i = minx; i < width; i++) { for (int j = miny; j < height; j++) { /* * 换色 * */ int pixel = bImage.getRGB(i, j); rgb[0] = (pixel & 0xff0000) >>16; rgb[1] = (pixel & 0xff00) >>8; rgb[2] = (pixel & 0xff) ; if (rgb[0]<230&&rgb[0]>100&& rgb[1]<230&&rgb[1]>100 && rgb[2]<230&&rgb[2]>100) { bImage.setRGB(i, j, 0xffffff); } } } System.out.println("\t处理完毕:"+files[x].getName()); System.out.println(); /* * 输出 * */ FileOutputStream ops; try { ops = new FileOutputStream(new File("/Volumes/Function/G/test4/"+x+".jpg")); ImageIO.write(bImage, "jpg", ops); ops.flush(); ops.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }


摘自:http://zjfhw.iteye.com/blog/1497288 【利用Java处理图片,更换背景】

    推荐阅读