java抠图边框颜色处理_java 实现抠图(项目应用场景:抠图章)

本文介绍了一个Java程序,用于实现基于颜色范围的抠图功能,特别是针对抠图章的应用。代码通过遍历图像像素,判断颜色是否在预设的色差范围内,并设置透明度,从而达到抠图效果。用户可以根据实际需求调整色差范围值以优化抠图结果。
摘要由CSDN通过智能技术生成

1、直接看代码,如何抠得不是很完美,修改下色差范围值,直到将底色全部抠掉

import javax.imageio.ImageIO;

import javax.swing.*;

import java.awt.*;

import java.awt.image.*;

import java.io.*;

public class Test {

//色差范围0~255

public static int color_range = 75;

public static void main(String[] args) throws Exception{

BufferedImage image = ImageIO.read(new File("/Users/xiaomin/文档/图片/123.jpeg"));

// 高度和宽度

int height = image.getHeight();

int width = image.getWidth();

// 生产背景透明和内容透明的图片

ImageIcon imageIcon = new ImageIcon(image);

BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);

Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics(); // 获取画笔

g2D.drawImage(imageIcon.getImage(), 0, 0, null); // 绘制Image的图片,使用了imageIcon.getImage(),目的就是得到image,直接使用image就可以的

int alpha = 0; // 图片透明度

// 外层遍历是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 (colorInRange(rgb)){

// #AARRGGBB 最前两位为透明度

rgb = (alpha << 24) | (rgb & 0x00ffffff);

bufferedImage.setRGB(x, y, rgb);

alpha = 0;

}else{

// 设置为不透明

alpha = 255;

// #AARRGGBB 最前两位为透明度

rgb = (alpha << 24) | (0xff0000);

bufferedImage.setRGB(x, y, rgb);

}

}

}

// 绘制设置了RGB的新图片,这一步感觉不用也可以只是透明地方的深浅有变化而已,就像蒙了两层的感觉

g2D.drawImage(bufferedImage, 0, 0, null);

// 生成图片为PNG

ImageIO.write(bufferedImage, "png", new File("/Users/zhuxiao/construn/文档/图片/b.png"));

}

// 判断是背景还是内容

public static boolean colorInRange(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位

// 通过RGB三分量来判断当前颜色是否在指定的颜色区间内

if (red >= color_range && green >= color_range && blue >= color_range){

return true;

};

return false;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值