java 圖片處理之寸照背景色替換

一、功能描述:
將藍底/紅底寸照批量轉換爲白底

二、準備工作:
先建要處理的圖片目錄 ,如F:/img,鏈接中img.zip中爲示例紅底/藍底寸照,可下載。
鏈接:https://pan.baidu.com/s/1yZMcxBHh-iWHGkH75vvLdw 提取碼:r3on

三、代碼:

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;

/** 
 * 功能: 
 * 將藍底/紅底寸照批量轉換爲白底 
 * 
 */
public class ImageProcessing { 
   
    public static void main(String args[]) throws IOException
    {
        /** 
         * 要處理的圖片目錄 
         */
        File dir = new File("F:/img");
        /** 
         * 列出目錄中的圖片,得到數組 
         */
        File[] files = dir.listFiles();
        /** 
         * 遍歷數組 
         */
        for (int x = 0; x < files.length; x++)
        {
            /** 
             * 定義一個RGB的數組,因爲圖片的RGB模式是由三個 0-255來表示的 比如白色就是(255,255,255) 
             */
            int[] rgb = new int[3];
            /** 
             * 用來處理圖片的緩衝流 
             */
            BufferedImage bi = null;
            try
            {
                /** 
                 * 用ImageIO將圖片讀入到緩衝中 
                 */
                bi = ImageIO.read(files[x]);
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            /** 
             * 得到圖片的長寬 
             */
            int width = bi.getWidth();
            int height = bi.getHeight();
            int minx = bi.getMinX();
            int miny = bi.getMinY();
            System.out.println("正在處理:" + files[x].getName());
            /** 
             * 這裏是遍歷圖片的像素,因爲要處理圖片的背色,所以要把指定像素上的顏色換成目標顏色 
             * 這裏 是一個二層循環,遍歷長和寬上的每個像素 
             */
            for (int i = minx; i < width; i++)
            {
                for (int j = miny; j < height; 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] < 110 && rgb[2] > 100)||(rgb[0]>130 && rgb[1]<40 && rgb[2]<40)){

                            /** 
                            * 這裏是判斷通過,則把該像素換成白色 
                            */
                            bi.setRGB(i, j, 0xffffff);
                        }

                    }
                }
                System.out.println("\t處理完畢:" + files[x].getName());
                System.out.println();
                /** 
                 * 將緩衝對象保存到新文件中 
                 */
                FileOutputStream ops = new FileOutputStream(new File("F:/img/new_" + files[x].getName()));
                ImageIO.write(bi, "jpg", ops);
                ops.flush();
                ops.close();
            }
        }
}

四、測試:
執行main方法,可見F:/img下會生成新的以new_開頭的處理後的寸照。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章