java改变图片颜色_使用java代码实现证件照换背景色
思路:我們知道,每張圖片都是由眾多的像素點(diǎn)組成,那么我們是不是就可以根據(jù)像素點(diǎn)的范圍來(lái)修改這個(gè)圖片的像素點(diǎn)的顏色,進(jìn)而就可以達(dá)到修改證件照背景顏色的效果啦!我們可以配合取色器獲取顏色的rgb,并修改為想要的顏色。
缺點(diǎn):即使證件照背景色看起來(lái)是一樣的,但色素點(diǎn)還是不一樣,所以我們獲取像素點(diǎn)必須要在一段范圍內(nèi),修改之后,效果也沒(méi)有那么好
提示:可以深入學(xué)習(xí)OpenCV,這樣換背景后的照片會(huì)更好。
分享一下我使用的很好用的取色器
提取碼:hhm1
所以,就可以通過(guò)代碼修改一些簡(jiǎn)單的背景色了,代碼如下:
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");
//新建一個(gè)長(zhǎng)度為3的數(shù)組,負(fù)責(zé)保存rgb的值
int[] rgb = new int[3];
//通過(guò)ImageIO.read()方法來(lái)返回一個(gè)BufferedImage對(duì)象,可以對(duì)圖片像素點(diǎn)進(jìn)行修改
BufferedImage bImage = ImageIO.read(dir);
//獲取圖片的長(zhǎng)寬高
int width = bImage.getWidth();
int height = bImage.getHeight();
int minx = bImage.getMinTileX();
int miny = bImage.getMinTileY();
//遍歷圖片的所有像素點(diǎn),并對(duì)各個(gè)像素點(diǎn)進(jìn)行判斷,是否修改
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) ;
//進(jìn)行判斷,如果色素點(diǎn)在指定范圍內(nèi),則進(jìn)行下一步修改
if (rgb[0]<110&&rgb[0]>50&& rgb[1]<30&&rgb[1]>10 && rgb[2]<50&&rgb[2]>25) { //修改像素點(diǎn),0x007ABB是證件照的藍(lán)色背景色
bImage.setRGB(i, j, 0x007ABB);
}
}
}
//輸出照片保存在本地
FileOutputStream ops;
try {
ops = new FileOutputStream(new File("E:/2.jpg"));
//這里寫(xiě)入的“jpg”是照片的格式,根據(jù)照片后綴有所不同
ImageIO.write(bImage, "jpg", ops);
ops.flush();
ops.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
這樣就完成了對(duì)圖片背景色的修改,但是有太多局限性,可以根據(jù)自己需要使用。
總結(jié)
以上是生活随笔為你收集整理的java改变图片颜色_使用java代码实现证件照换背景色的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++ Standard Lib
- 下一篇: 我的世界手机版开服务器领地系统,我的世界