java如何去除圖片中的白色背景
更新時間:2018年04月25日 14:22:35 作者:小目標實現(xiàn)了嗎
這篇文章主要為大家詳細介紹了java去除圖片中白色背景的方法,教大家如何將圖片中的白色背景去掉,具有一定的參考價值,感興趣的小伙伴們可以參考一下
最近在做一個需求是從數(shù)據(jù)庫里面取出圖片,但是圖片都有一個白色的背景,于是項目組希望可以將圖片的白色的背景去掉。
本文為大家分享了java去除圖片中的白色背景的方法,供大家參考,具體內(nèi)容如下
如圖所示:

當然在這個上面是看不出來的,其實第一張圖片是有一個白色的背景的,但是第二張圖片沒有,相信你理解我說的,那么這個代碼我應(yīng)該如何實現(xiàn):
package com.wdg.util;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
public class ImageUtil {
public static void main(String[] args) {
transferAlpha();
}
public static byte[] transferAlpha() {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
File file = new File("D:\\08\\11.png");
InputStream is;
try {
is = new FileInputStream(file);
// 如果是MultipartFile類型,那么自身也有轉(zhuǎn)換成流的方法:is = file.getInputStream();
BufferedImage bi = ImageIO.read(is);
Image image = (Image) bi;
ImageIcon imageIcon = new ImageIcon(image);
BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(), imageIcon.getIconHeight(),
BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics();
g2D.drawImage(imageIcon.getImage(), 0, 0, imageIcon.getImageObserver());
int alpha = 0;
for (int j1 = bufferedImage.getMinY(); j1 < bufferedImage.getHeight(); j1++) {
for (int j2 = bufferedImage.getMinX(); j2 < bufferedImage.getWidth(); j2++) {
int rgb = bufferedImage.getRGB(j2, j1);
int R = (rgb & 0xff0000) >> 16;
int G = (rgb & 0xff00) >> 8;
int B = (rgb & 0xff);
if (((255 - R) < 30) && ((255 - G) < 30) && ((255 - B) < 30)) {
rgb = ((alpha + 1) << 24) | (rgb & 0x00ffffff);
}
bufferedImage.setRGB(j2, j1, rgb);
}
}
g2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver());
ImageIO.write(bufferedImage, "png", new File("D:\\08\\12.png"));// 直接輸出文件
} catch (Exception e) {
e.printStackTrace();
} finally {
}
return byteArrayOutputStream.toByteArray();
}
}
代碼是對圖片進行操作,復(fù)制過去就可以直接實現(xiàn)你的功能了。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
MyBatis關(guān)聯(lián)查詢的實現(xiàn)
MyBatis可以通過定義多個表的關(guān)聯(lián)關(guān)系,實現(xiàn)多表查詢,本文主要介紹了MyBatis關(guān)聯(lián)查詢的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-11-11
java 刪除文件夾中的所有內(nèi)容而不刪除文件夾本身的實例
下面小編就為大家?guī)硪黄猨ava 刪除文件夾中的所有內(nèi)容而不刪除文件夾本身的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12

