背景:
如下图所示:图片电子章那一块的区域的背景色有点深,想将其改为纯白色,与整个图片的背景色调一致,
仔细看的话,可以看到红框中,左边一半的颜色比右边一半的稍深一些
效果:
可以看到,原来电子章的背景色有点深,现在是纯白色了,而且不影响电子章的显示效果
代码:
public class Test { public static void main(String[] args) { getImageGRB("E:\\222.png"); } public static int[][] getImageGRB(String filePath) { File file = new File(filePath); int[][] result = null; if (!file.exists()) { return result; } try { BufferedImage bufImg = ImageIO.read(file); int height = bufImg.getHeight(); int width = bufImg.getWidth(); result = new int[width][height]; for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { result[i][j] = bufImg.getRGB(i, j) & 0xFFFFFF; int pixel = bufImg.getRGB(i, j); int rgbR = (pixel & 0xff0000) >> 16; int rgbG = (pixel & 0xff00) >> 8; int rgbB = (pixel & 0xff); System.out.println("rgbR:" + rgbR + ",rgbG:" + rgbG+ ",rgbB" + rgbB);
//240这个值,比电子章的背景色的RGB值稍微小一点。可以上下浮动多试试这个值,调一调哪个阈值最好 if(rgbR > 240 && rgbG > 240 && rgbB > 240){ //将图片中大于240的色值,设为白色 bufImg.setRGB(i, j, new Color(255,255,255).getRGB()); } } } File outputfile = new File("E:\\222.png"); ImageIO.write(bufImg, "png", outputfile); } catch (IOException e) { e.printStackTrace(); } return result; } }
原理是:
一张图片是由一个个RGB的位图(一个个点)组成,当这些点密度达到一定程度,我们看着就是一副完整的图。
我们遍历这些点的RGB颜色,将获取需要更改的颜色的RGB的值,将其改为想要的值
PS:
取色器:可以通过Windows自带的画图软件,获取图片RGB的值