使用java代码实现证件照换背景色

        思路:我们知道,每张图片都是由众多的像素点组成,那么我们是不是就可以根据像素点的范围来修改这个图片的像素点的颜色,进而就可以达到修改证件照背景颜色的效果啦!我们可以配合取色器获取颜色的rgb,并修改为想要的颜色。

缺点:即使证件照背景色看起来是一样的,但色素点还是不一样,所以我们获取像素点必须要在一段范围内,修改之后,效果也没有那么好

提示:可以深入学习OpenCV,这样换背景后的照片会更好。

分享一下我使用的很好用的取色器

提取码:hhm1

所以,就可以通过代码修改一些简单的背景色了,代码如下:

package com.able;


import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class ImageBackgroundDemo {
	public static void main(String[] args) throws Exception{
            //指定的图片路径
			FileInputStream dir = new FileInputStream("E:/111.jpg");
            //新建一个长度为3的数组,负责保存rgb的值
			int[] rgb = new int[3];
            //通过ImageIO.read()方法来返回一个BufferedImage对象,可以对图片像素点进行修改
			BufferedImage bImage  = ImageIO.read(dir);
            //获取图片的长宽高
			int width = bImage.getWidth();
			int height = bImage.getHeight();
			int minx = bImage.getMinTileX();
			int miny = bImage.getMinTileY();
            //遍历图片的所有像素点,并对各个像素点进行判断,是否修改
			for (int i = minx; i < width; i++) {
				for (int j = miny; j < height; j++) {
					int pixel = bImage.getRGB(i, j);
                    //获取图片的rgb
					rgb[0] = (pixel & 0xff0000) >>16;
					rgb[1] = (pixel & 0xff00) >>8;
				 	rgb[2] = (pixel & 0xff) ;
				 	//进行判断,如果色素点在指定范围内,则进行下一步修改
				 	if (rgb[0]<110&&rgb[0]>50&& rgb[1]<30&&rgb[1]>10 && rgb[2]<50&&rgb[2]>25) {        //修改像素点,0x007ABB是证件照的蓝色背景色
						bImage.setRGB(i, j, 0x007ABB);
					}
				}
			}
            //输出照片保存在本地
			FileOutputStream ops;
			try {
				ops = new FileOutputStream(new File("E:/2.jpg"));
                //这里写入的“jpg”是照片的格式,根据照片后缀有所不同
				ImageIO.write(bImage, "jpg", ops);
				ops.flush();
				ops.close();
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
	}
}

这样就完成了对图片背景色的修改,但是有太多局限性,可以根据自己需要使用。

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值