利用JPEGImageEncoder進行簡單的圖片壓縮


import java.awt.Dimension;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import java.io.File;
import javax.imageio.ImageIO;

/**
 * JPG圖片壓縮工具
 * @author clj
 *
 */
public class ImageUtil {
    /**
     * 將原圖src壓縮后存入des中
     * @param src   原圖片文件
     * @param des  壓縮后的存儲文件
     * @param imgSize  圖片縮放的最大尺寸
     * @param quality   圖片質量0~1
     */
    public  static void compress(File src,File des, int imgSize,float quality) {
        FileOutputStream out = null;
        try {
            //讀取源圖片到內存中
            Image image = ImageIO.read(src); 
            //獲得壓縮尺寸
            Dimension dim = getRectangle(image.getWidth(null), image.getHeight(null),imgSize);
            //在內存中創建壓縮圖片的緩沖區
            BufferedImage tmpImg=new BufferedImage(dim.width,dim.height ,BufferedImage.TYPE_3BYTE_BGR);
            //在緩沖區按縮放后的大小繪制壓縮圖片
            tmpImg.getGraphics().drawImage(image.getScaledInstance(dim.width,dim.height,Image.SCALE_SMOOTH), 0, 0, null);
            //設置圖片質量,
            JPEGEncodeParam jep =   JPEGCodec.getDefaultJPEGEncodeParam(tmpImg);
            jep.setQuality(quality, true);
            //保存壓縮圖片 
            //輸出圖片存在則先刪除
            if(des.exists()){
                des.delete();
            }
            //獲得輸出流
            out = new FileOutputStream(des);
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            encoder.encode(tmpImg);
        } catch (Exception ex) {
            ex.printStackTrace();
        }finally{
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    /**
     * 獲得壓縮圖片尺寸
     * 最長邊壓縮為size px,短邊按比例變化
     * @param width
     * @param height
     * @return
     */
    private static Dimension getRectangle( int width, int height, int size){
        Dimension dim = new Dimension();
        double w = width+0.0;
        double h = height + 0.0;
        double rate = w/h;
        //寬或高大於size時,將較大者縮小為size,較小者則按比例變化
        if(w > h && w > size){
            w = size;
            h = w / rate;
        }else if(h > w && h > size){
            h = size;
            w = h*rate;
        }
        width = (int)w;
        height = (int)h;
        dim.width = width;
        dim.height = height;
        return dim;
    }
    
    
    
    public static void main(String args[]){
        ImageUtil.compress(new File("D:/test/img/src.jpg"), new File("D:/test/img/out.jpg"),600,1f);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM