利用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)