java实现图片去除底色,图片变成透明背景
废话少说,直接进入正题!
实现原理及步骤
读取待处理图片为BufferedImage对象
BufferedImage image = ImageIO.read(new File("D://mm.png"));
遍历图片对象每个像素点进行处理
对image的每个像素点进行遍历处理,获得每个像素点的rgb颜色。判断当前rgb是否为匹配替换的rgb,如果是就替换成透明。
我们可以取图片的边缘颜色rgb作为匹配的对象。
int alpha = 255;
String removeRgb;
// 遍历Y轴的像素
for (int y = bufferedImage.getMinY(); y < bufferedImage.getHeight(); y++) {
// 遍历X轴的像素
for (int x = bufferedImage.getMinX(); x < bufferedImage.getWidth(); x++) {
int rgb = bufferedImage.getRGB(x, y);
// 取图片边缘颜色作为对比对象
if (y == bufferedImage.getMinY() && x == bufferedImage.getMinX()) {
removeRgb = convertRgb(rgb);
}
// 设置为透明背景
if (removeRgb.equals(convertRgb(rgb))) {
alpha = 0;
} else {
alpha = 255;
}
rgb = (alpha << 24) | (rgb & 0x00ffffff);
bufferedImage.setRGB(x, y, rgb);
}
}
转RGB
public static String convertRgbStr(int color) {
int red = (color & 0xff0000) >> 16;// 获取color(RGB)中R位
int green = (color & 0x00ff00) >> 8;// 获取color(RGB)中G位
int blue = (color & 0x0000ff);// 获取color(RGB)中B位
return red + "," + green + "," + blue;
}
生成图片为PNG
ImageIO.write(bufferedImage, "png", new File("D://mm(透明).png"));
以下工具就是使用java去实现的图片去除底色功能,简单粗暴,效果出众。
访问
https://tools.kalvinbg.cn/image/bgRemover