这个是网上一个大牛想到的方法,独特的见解,适用于给证件照换背景,即颜色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处理图片,更换背景】
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)