圖像壓縮、生成縮略圖Java類

xb68 9年前發布 | 2K 次閱讀 Java

    import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.imageio.ImageIO;  

/**  
 * * @author WQ * @date 2011-01-14 * @versions 1.0 圖片壓縮工具類 提供的方法中可以設定生成的  
 * 縮略圖片的大小尺寸等  
 */    
public class ImageUtil {    
    /** * 圖片文件讀取 * * @param srcImgPath * @return */    
    private static BufferedImage InputImage(String srcImgPath) {    
        BufferedImage srcImage = null;    
        try {    
            FileInputStream in = new FileInputStream(srcImgPath);    
            srcImage = javax.imageio.ImageIO.read(in);    
        } catch (IOException e) {    
            System.out.println("讀取圖片文件出錯!" + e.getMessage());    
            e.printStackTrace();    
        }    
        return srcImage;    
    }    

    /**  
     * * 將圖片按照指定的圖片尺寸壓縮 * * @param srcImgPath :源圖片路徑 * @param outImgPath *  
     * :輸出的壓縮圖片的路徑 * @param new_w * :壓縮后的圖片寬 * @param new_h * :壓縮后的圖片高  
     */    
    public static void compressImage(String srcImgPath, String outImgPath,    
            int new_w, int new_h) {    
        BufferedImage src = InputImage(srcImgPath);    
        disposeImage(src, outImgPath, new_w, new_h);    
    }    

    /**  
     * * 指定長或者寬的最大值來壓縮圖片 * * @param srcImgPath * :源圖片路徑 * @param outImgPath *  
     * :輸出的壓縮圖片的路徑 * @param maxLength * :長或者寬的最大值  
     */    
    public static void compressImage(String srcImgPath, String outImgPath,    
            int maxLength) {    
        // 得到圖片    
        BufferedImage src = InputImage(srcImgPath);    
        if (null != src) {    
            int old_w = src.getWidth();    
            // 得到源圖寬    
            int old_h = src.getHeight();    
            // 得到源圖長    
            int new_w = 0;    
            // 新圖的寬    
            int new_h = 0;    
            // 新圖的長    
            // 根據圖片尺寸壓縮比得到新圖的尺寸    
            if (old_w > old_h) {    
                // 圖片要縮放的比例    
                new_w = maxLength;    
                new_h = (int) Math.round(old_h * ((float) maxLength / old_w));    
            } else {    
                new_w = (int) Math.round(old_w * ((float) maxLength / old_h));    
                new_h = maxLength;    
            }    
            disposeImage(src, outImgPath, new_w, new_h);    
        }    
    }    

    /** * 處理圖片 * * @param src * @param outImgPath * @param new_w * @param new_h */    
    private synchronized static void disposeImage(BufferedImage src,    
            String outImgPath, int new_w, int new_h) {    
        // 得到圖片    
        int old_w = src.getWidth();    
        // 得到源圖寬    
        int old_h = src.getHeight();    
        // 得到源圖長    
        BufferedImage newImg = null;    
        // 判斷輸入圖片的類型    
        switch (src.getType()) {    
        case 13:    
            // png,gifnewImg = new BufferedImage(new_w, new_h,    
            // BufferedImage.TYPE_4BYTE_ABGR);    
            break;    
        default:    
            newImg = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB);    
            break;    
        }    
        Graphics2D g = newImg.createGraphics();    
        // 從原圖上取顏色繪制新圖    
        g.drawImage(src, 0, 0, old_w, old_h, null);    
        g.dispose();    
        // 根據圖片尺寸壓縮比得到新圖的尺寸    
        newImg.getGraphics().drawImage(    
                src.getScaledInstance(new_w, new_h, Image.SCALE_SMOOTH), 0, 0,    
                null);    
        // 調用方法輸出圖片文件    
        OutImage(outImgPath, newImg);    
    }    

    /**  
     * * 將圖片文件輸出到指定的路徑,并可設定壓縮質量 * * @param outImgPath * @param newImg * @param  
     * per  
     */    
    private static void OutImage(String outImgPath, BufferedImage newImg) {    
        // 判斷輸出的文件夾路徑是否存在,不存在則創建    
        File file = new File(outImgPath);    
        if (!file.getParentFile().exists()) {    
            file.getParentFile().mkdirs();    
        }// 輸出到文件流    
        try {    
            ImageIO.write(newImg, outImgPath.substring(outImgPath    
                    .lastIndexOf(".") + 1), new File(outImgPath));    
        } catch (FileNotFoundException e) {    
            e.printStackTrace();    
        } catch (IOException e) {    
            e.printStackTrace();    
        }    
    }    
    public static void main(String args[]){  
        long st = System.currentTimeMillis();  
        // ImageUtil.compressImage("c:/test1.jpg", "c:/test2.jpg", 558, 273);  
        ImageUtil.compressImage("c:/test.jpg", "c:/test3.jpg",558);  
        System.out.println(System.currentTimeMillis()-st);  
    }  
}  </pre> 


 本文由用戶 xb68 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!