java 實現批量圖片文件格式相互轉換+批量文件刪除

package com.gblfy.util;

import com.sun.jimi.core.Jimi;
import com.sun.jimi.core.JimiException;
import com.sun.jimi.core.JimiWriter;
import com.sun.jimi.core.options.JPGOptions;
import com.sun.jimi.core.options.PNGOptions;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.image.ImageProducer;
import java.io.File;

/*******************************************************************************
 *
 * @direction: 圖像格式轉換類(轉換時不需要關心源圖的格式)
 * @support  : GIF(no compressed encoding), JPEG, TIFF, PNG, PICT, BMP, Targa,
 *             ICO, CUR, XBM, XPM, PCX, DCX
 * @author  :  gblfy
 ******************************************************************************/
public class ImageConverUtil {


    public static String FILE_SUFFIX=".tif";
    // public static String FILE_SUFFIX=".jpg";
    public static String DEL_FILE_SUFFIX=".tif";
    // public static String DEL_FILE_SUFFIX=".jpg";
    /**
     * 任意圖片轉換
     *
     * @param sSourceImage 源圖片
     * @param sDestImage   轉換後的圖片
     * @param fileSuffix   轉換後的圖片擴展名
     * @return
     */
    public static boolean imageConvertCommon(String sSourceImage, String sDestImage, String fileSuffix) {
        if (sSourceImage == null || sSourceImage.trim().equals("")) {
            System.out.println("JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "() : 要轉換的源圖像文件路徑不能爲空!");
            return false;
        }

        if (sDestImage == null || sDestImage.trim().equals("")) {
            sDestImage = sSourceImage.substring(0, sSourceImage.lastIndexOf(".")) + fileSuffix;
        } else if (!sDestImage.endsWith(fileSuffix)) {
            sDestImage += fileSuffix;
        }
        //檢查源圖像文件
        File tSourceImageFile = new File(sSourceImage);
        if (!tSourceImageFile.exists()) {
            System.out.println("JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "() : 要轉換的源圖像文件路徑不存在!");
            return false;
        } else if (!tSourceImageFile.canRead()) {
            System.out.println("JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "(): 要轉換的源圖像文件路徑不可讀!");
            return false;
        } else if (!tSourceImageFile.isFile()) {
            System.out.println("JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "() : 要轉換的源圖像路徑不是一個有效的文件名!");
            return false;
        }
        long lRunStartTime = System.currentTimeMillis();

        try {
            BufferedImage bi = ImageIO.read(tSourceImageFile);
            if (bi == null) {
                //圖片解碼錯誤
                System.out.println("Jre:" + System.getProperty("java.version"));
                System.out.println(" JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "() : 要轉換的源圖像解碼錯誤!");
                return false;
            }
            if (!ImageIO.write(bi, fileSuffix.replace(".", ""), new File(sDestImage))) {
                System.out.println(" JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "() : 轉換圖像格式發生異常!");
                return false;
            }
            long lRunEndTime = System.currentTimeMillis();
            long lRunTime = lRunEndTime - lRunStartTime;
            System.out.println(" JimiImageUtil.convertToJPG() 運行時間 : " + lRunTime + " 毫秒");
        } catch (Exception e) {
            System.out.println(" JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "() : 轉換圖像格式發生異常!");
            return false;
        }
        return true;
    }

    /**
     * 圖片轉gif
     *
     * @param sSourceImage 源圖片的絕對路徑  D:\5\1.jpg D:\5\1.png
     * @param sDestImage   轉換後的gif圖片路徑  D:\5\1.gif
     * @return
     */
    public static boolean imageConvertToGIF(String sSourceImage, String sDestImage) {
        if (sSourceImage == null || sSourceImage.trim().equals("")) {
            System.out.println(" JimiImageUtil.convertToGIF() : 要轉換的源圖像文件路徑不能爲空!");
            return false;
        }

        if (sDestImage == null || sDestImage.trim().equals("")) {
            sDestImage = sSourceImage.substring(0, sSourceImage.lastIndexOf(".")) + ".gif";
        } else if (!sDestImage.endsWith(".gif")) {
            sDestImage += ".gif";
        }

        //檢查源圖像文件
        File tSourceImageFile = new File(sSourceImage);
        if (!tSourceImageFile.exists()) {
            System.out.println(" JimiImageUtil.convertToGIF() : 要轉換的源圖像文件路徑不存在!");
            return false;
        } else if (!tSourceImageFile.canRead()) {
            System.out.println(" JimiImageUtil.convertToGIF() : 要轉換的源圖像文件路徑不可讀!");
            return false;
        } else if (!tSourceImageFile.isFile()) {
            System.out.println(" JimiImageUtil.convertToGIF() : 要轉換的源圖像路徑不是一個有效的文件名!");
            return false;
        }
        try {
            BufferedImage bi = ImageIO.read(tSourceImageFile);
            if (bi == null) {
                //圖片解碼錯誤
                System.out.println("Jre:" + System.getProperty("java.version"));
                System.out.println(" JimiImageUtil.convertToGIF() : 要轉換的源圖像解碼錯誤!");
                return false;
            }
            if (!ImageIO.write(bi, "gif", new File(sDestImage))) {
                System.out.println(" JimiImageUtil.convertToGIF() : 轉換圖像格式發生異常!");
                return false;
            }
        } catch (Exception e) {
            System.out.println(" JimiImageUtil.convertToGIF() : 轉換圖像格式發生異常!");
            return false;
        }
        return true;
    }

    /**
     * 圖片轉Tif
     *
     * @param sSourceImage
     * @param sDestImage
     * @return
     */
    public static boolean imageConvertToTif(String sSourceImage, String sDestImage) {
        if (sSourceImage == null || sSourceImage.trim().equals("")) {
            System.out.println(" JimiImageUtil.convertToGIF() : 要轉換的源圖像文件路徑不能爲空!");
            return false;
        }

        if (sDestImage == null || sDestImage.trim().equals("")) {
            sDestImage = sSourceImage.substring(0, sSourceImage.lastIndexOf(".")) + ".tif";
        } else if (!sDestImage.endsWith(".tif")) {
            sDestImage += ".tif";
        }

        //檢查源圖像文件
        File tSourceImageFile = new File(sSourceImage);
        if (!tSourceImageFile.exists()) {
            System.out.println(" JimiImageUtil.convertToTif() : 要轉換的源圖像文件路徑不存在!");
            return false;
        } else if (!tSourceImageFile.canRead()) {
            System.out.println(" JimiImageUtil.convertToTif() : 要轉換的源圖像文件路徑不可讀!");
            return false;
        } else if (!tSourceImageFile.isFile()) {
            System.out.println(" JimiImageUtil.convertToTif() : 要轉換的源圖像路徑不是一個有效的文件名!");
            return false;
        }
        try {
            BufferedImage bi = ImageIO.read(tSourceImageFile);
            if (bi == null) {
                //圖片解碼錯誤
                System.out.println("Jre:" + System.getProperty("java.version"));
                System.out.println(" JimiImageUtil.convertToTif() : 要轉換的源圖像解碼錯誤!");
                return false;
            }
            if (!ImageIO.write(bi, "tif", new File(sDestImage))) {
                System.out.println(" JimiImageUtil.convertToTif() : 轉換圖像格式發生異常!");
                return false;
            }
        } catch (Exception e) {
            System.out.println("JimiImageUtil.convertToTif() : 轉換圖像格式發生異常!");
            return false;
        }
        return true;
    }

    /**
     * 轉換圖像格式爲 JPG
     *
     * @param sSourceImage, 其它格式的源圖像文件路徑
     * @param sDestImage,   目標 JPG 圖像文件存放路徑
     * @param nQuality,     品質, 0-100, 數值越高品質越好
     * @return
     */
    public static boolean imageConvertToJPG(String sSourceImage, String sDestImage, int nQuality) {
        if (sSourceImage == null || sSourceImage.trim().equals("")) {
            System.out.println(" JimiImageUtil.convertToJPG() : 要轉換的源圖像文件路徑不能爲空!");
            return false;
        }

        if (sDestImage == null || sDestImage.trim().equals("")) {
            sDestImage = sSourceImage.substring(0, sSourceImage.lastIndexOf(".")) + ".jpg";
        } else if (!sDestImage.endsWith(".jpg")) {
            sDestImage += ".jpg";
        }

        //檢查源圖像文件
        File tSourceImageFile = new File(sSourceImage);
        if (!tSourceImageFile.exists()) {
            System.out.println(" JimiImageUtil.convertToJPG() : 要轉換的源圖像文件路徑不存在!");
            return false;
        } else if (!tSourceImageFile.canRead()) {
            System.out.println(" JimiImageUtil.convertToJPG() : 要轉換的源圖像文件路徑不可讀!");
            return false;
        } else if (!tSourceImageFile.isFile()) {
            System.out.println(" JimiImageUtil.convertToJPG() : 要轉換的源圖像路徑不是一個有效的文件名!");
            return false;
        }
        tSourceImageFile = null;
        try {
            long lRunStartTime = System.currentTimeMillis();
            JPGOptions tJPGOptions = new JPGOptions();
            if (nQuality < 0 || nQuality > 100) {
                tJPGOptions.setQuality(75);
            } else {
                tJPGOptions.setQuality(nQuality);
            }
            ImageProducer tImageProducer = Jimi.getImageProducer(sSourceImage);
            JimiWriter tJimiWriter = Jimi.createJimiWriter(sDestImage);
            tJimiWriter.setSource(tImageProducer);
            tJimiWriter.setOptions(tJPGOptions);
            tJimiWriter.putImage(sDestImage);
            tImageProducer = null;
            tJimiWriter = null;
            tJPGOptions = null;
            long lRunEndTime = System.currentTimeMillis();
            long lRunTime = lRunEndTime - lRunStartTime;
            System.out.println(" JimiImageUtil.convertToJPG() 運行時間 : " + lRunTime + " 毫秒");
        } catch (JimiException je) {
            System.out.println(" JimiImageUtil.convertToJPG() : 轉換圖像格式發生異常!");
            je.printStackTrace();
            return false;
        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 轉換圖像格式爲 PNG
     *
     * @param sSourceImage , 其它格式的源圖像文件路徑
     * @param sDestImage   ,目標 PNG 圖像文件存放路徑
     * @param sCompression ,壓縮比, none, default, fast, max
     * @return
     */
    public static boolean imageConvertToPNG(String sSourceImage, String sDestImage, String sCompression) {
        if (sSourceImage == null || sSourceImage.trim().equals("")) {
            System.out.println(" JimiImageUtil.convertToPNG() : 要轉換的源圖像文件路徑不能爲空!");
            return false;
        }
        if (sDestImage == null || sDestImage.trim().equals("")) {
            sDestImage = sSourceImage.substring(0, sSourceImage.lastIndexOf(".")) + ".png";
        } else if (!sDestImage.endsWith(".png")) {
            sDestImage += ".png";
        }
        //----------------------------------------------------------------------
        //檢查源圖像文件
        File tSourceImageFile = new File(sSourceImage);
        if (!tSourceImageFile.exists()) {
            System.out.println(" JimiImageUtil.convertToPNG() : 要轉換的源圖像文件路徑不存在!");
            return false;
        } else if (!tSourceImageFile.canRead()) {
            System.out.println(" JimiImageUtil.convertToPNG() : 要轉換的源圖像文件路徑不可讀!");
            return false;
        } else if (!tSourceImageFile.isFile()) {
            System.out.println(" JimiImageUtil.convertToPNG() : 要轉換的源圖像路徑不是一個有效的文件名!");
            return false;
        }
        tSourceImageFile = null;

        try {
            long lRunStartTime = System.currentTimeMillis();
            PNGOptions tPNGOptions = new PNGOptions();
            if (sCompression == null || sCompression.trim().equals("")) {
                tPNGOptions.setCompressionType(PNGOptions.COMPRESSION_DEFAULT);
            } else if (sCompression.equalsIgnoreCase("none")) {
                tPNGOptions.setCompressionType(PNGOptions.COMPRESSION_NONE);
            } else if (sCompression.equalsIgnoreCase("fast")) {
                tPNGOptions.setCompressionType(PNGOptions.COMPRESSION_FAST);
            } else if (sCompression.equalsIgnoreCase("max")) {
                tPNGOptions.setCompressionType(PNGOptions.COMPRESSION_MAX);
            } else {
                tPNGOptions.setCompressionType(PNGOptions.COMPRESSION_DEFAULT);
            }
            ImageProducer tImageProducer = Jimi.getImageProducer(sSourceImage);
            JimiWriter tJimiWriter = Jimi.createJimiWriter(sDestImage);
            tJimiWriter.setSource(tImageProducer);
            tJimiWriter.setOptions(tPNGOptions);
            tJimiWriter.putImage(sDestImage);
            tImageProducer = null;
            tJimiWriter = null;
            tPNGOptions = null;
            long lRunEndTime = System.currentTimeMillis();
            long lRunTime = lRunEndTime - lRunStartTime;
            System.out.println(" JimiImageUtil.convertToPNG() 運行時間 : " + lRunTime + " 毫秒");
        } catch (JimiException je) {
            System.out.println(" JimiImageUtil.convertToPNG() : 轉換圖像格式發生異常!");
            je.printStackTrace();
            return false;
        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        }
        return true;
    }

    public static void getFileListNotReturn(String path) {

        File dir = new File(path);
        // 該文件目錄下文件全部放入數組
        File[] files = dir.listFiles();
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                String fileName = files[i].getName();
                // 判斷是文件還是文件夾
                if (files[i].isDirectory()) {
                    // 獲取文件絕對路徑
                    getFileListNotReturn(files[i].getAbsolutePath());
                    // 判斷文件名是否以.jpg結尾
                } else if (fileName.endsWith(DEL_FILE_SUFFIX)) {
                    String strFileName = files[i].getAbsolutePath();
                    System.out.println("文件名:" + strFileName);
                    //對符合條件的文件統一水印處理
                    // iconAndTextWatermark(strFileName);
                    ImageConverUtil.imageConvertCommon(strFileName, "", FILE_SUFFIX);
                } else {
                    continue;
                }
            }
        }
    }

    /**
     * 刪除指定目錄下面指定文件類型的文件
     *
     * @param path
     */
    public static void delSpecifyTheTypeFile(String path) {
        File dir = new File(path);
        // 該文件目錄下文件全部放入數組
        File[] files = dir.listFiles();
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                String fileName = files[i].getName();
                // 判斷是文件還是文件夾
                if (files[i].isDirectory()) {
                    // 獲取文件絕對路徑
                    delSpecifyTheTypeFile(files[i].getAbsolutePath());
                    // 判斷文件名是否以.tif結尾
                } else if (fileName.endsWith(".tif")) {
                    String strFileName = files[i].getAbsolutePath();
                    System.out.println("刪除文件名:" + strFileName);
                    files[i].delete();
                } else {
                    continue;
                }
            }
        }
    }


    public static void main(String[] args) {
        String srcImgPath = "D:\\1\\srcImgPath\\";

        //批量圖片文件格式轉換
        getFileListNotReturn(srcImgPath);

        //批量刪除
        delSpecifyTheTypeFile(srcImgPath);

        //批量添加水印
        WaterMarkUtil.getFileListNotReturn(srcImgPath);

        //批量zip打包
        ZipCompressorUtil zc = new ZipCompressorUtil("D:/resource.zip");
        zc.compressNotContainShell(srcImgPath);


        //  tif 圖片轉jpg png gif
        // String inputFilePath = "D:" + File.separator + "1" + File.separator + "1.tif";
        // String outputFilePath = "D:" + File.separator + "1" + File.separator + "1.jpg";
        // String fileSuffix = ".jpg";
        // ImageConverUtil.imageConvertCommon(inputFilePath,outputFilePath, fileSuffix);
        // System.out.println("-----------------執行完成-------------");

        // String inputFilePath = "D:" + File.separator + "5" + File.separator + "1.jpg";
        // String outputFilePath = "D:" + File.separator + "5" + File.separator + "1.tif";
        // String fileSuffix = "tif";
        // ImageConverUtil.imageConvertCommon(inputFilePath,outputFilePath , fileSuffix);
        // System.out.println("-----------------執行完成-------------");

        //png /jpg 轉tif
        // String inputFilePath = "D:" + File.separator + "6" + File.separator + "1.jpg";
        // String inputFilePath = "D:" + File.separator + "6" + File.separator + "1.png";
        // String outputFilePath = "D:" + File.separator + "6" + File.separator + "1.tif";
        // ImageConverUtil.imageConvertToTif(inputFilePath, outputFilePath);
        // System.out.println("-----------------執行完成-------------");

        //png /jpg 轉gif
        // String inputFilePath = "D:" + File.separator + "5" + File.separator + "1.png";
        // String inputFilePath = "D:" + File.separator + "5" + File.separator + "1.jpg";
        // String outputFilePath = "D:" + File.separator + "5" + File.separator + "1.gif";
        // ImageConverUtil.imageConvertToGIF(inputFilePath, outputFilePath);
        // System.out.println("-----------------執行完成-------------");

        // png轉jpg
        // String inputFilePath = "D:" + File.separator + "4" + File.separator + "1.tif";
        // String outputFilePath = "D:" + File.separator + "4" + File.separator + "1.jpg";
        // ImageConverUtil.imageConvertToJPG(inputFilePath, outputFilePath, 100);
        // System.out.println("-----------------執行完成-------------");

        // jpg 轉png
        // String inputFilePath = "D:" + File.separator + "3" + File.separator + "1.jpg";
        // String outputFilePath = "D:" + File.separator + "3" + File.separator + "1.png";
        // ImageConverUtil.imageConvertToPNG(inputFilePath, outputFilePath, "default");
        // System.out.println("-----------------執行完成-------------");
    }


}

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