怎樣將藍底照片換成白底
阿新 • • 發佈:2017-06-25
ava 對象 end pro xxx get mage 面積 .com
方法:美圖秀秀 + java程序。
原來的照片是這樣的:
1. 先用美圖秀秀將面積較大的藍底以及邊緣比較光滑的部分先刷成白色,或者摳出來都行。
2. 用java程序將邊緣部分的藍色調替換成白色,代碼如下:
import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import javax.imageio.ImageIO; public class ImageProcessor { public static void main(String[] args) throwsException { File file = new File("xxx.jpg"); //要處理的圖片路徑 //定義一個RGB的數組,因為圖片的RGB模式是由三個 0-255來表示的 比如白色就是(255,255,255) int[] rgb = new int[3]; BufferedImage bi = null; //用來處理圖片的緩沖流 try { bi = ImageIO.read(file); //用ImageIO將圖片讀入到緩沖中 } catch(Exception e) { e.printStackTrace(); } //得到圖片的長寬 int width = bi.getWidth(); int height = bi.getHeight(); /** * 以下是遍歷圖片的像素,把指定區域內的像素的顏色換成目標顏色 */ //指定每個區域的範圍(x:beginX~endX, y:beginY~endY 圍起來的區域) int[] beginX = new int[]{230, 230, 1050}; int[] endX = new int[]{1130, 325, 1130}; int[] beginY = new int[]{0, 400, 400}; int[] endY = new int[]{400, 655, 685}; for (int k = 0; k < beginX.length; k++) { for (int i = beginX[k]; i < endX[k]; i++) { for (int j = beginY[k]; j < endY[k]; j++) { //得到指定像素(i,j)上的RGB值 int pixel = bi.getRGB(i, j); //分別進行位操作得到 r g b上的值 rgb[0] = (pixel & 0xff0000) >> 16; rgb[1] = (pixel & 0xff00) >> 8; rgb[2] = (pixel & 0xff); //進行換色操作,我這裏是要把藍底換成白底,那麽就判斷圖片中rgb值是否在藍色範圍的像素 if (rgb[0] < 155 && rgb[0] > 0 && rgb[1] < 256 && rgb[1] > 105 && rgb[2] < 256 && rgb[2] > 105) { bi.setRGB(i, j, 0xffffff); //是則把該像素換成白色 } } } } System.out.println(file.getName() + "處理完畢!"); /** * 將緩沖對象保存到新文件中 */ FileOutputStream ops = new FileOutputStream(new File("xxx.jpg")); //生成的新圖片路徑 ImageIO.write(bi, "jpg", ops); ops.flush(); ops.close(); } }
處理後:
3. 再用美圖秀秀把周圍未去除的藍色部分刷成白色。
4. 這樣基本上就完成了,如果不滿意,還可以用美圖秀秀中的“局部變色筆”,用黑色在頭發邊緣處刷一刷。
大功告成!!!!
怎樣將藍底照片換成白底