天天看點

[Java基礎]-- java 等比壓縮圖檔檔案

常用的java等比壓縮圖檔方法:
 import java.awt.Image;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;

 import javax.imageio.ImageIO;

 import com.dagong.querySystem.entity.ConstantInfo;
 import com.sun.image.codec.jpeg.JPEGCodec;
 import com.sun.image.codec.jpeg.JPEGImageEncoder;
 /** 
  * 圖檔壓縮處理 
  */  
 public class ZipImgUtil {  
     private Image img;  
     private int width;  
     private int height;  
     private static String urlImg2; //定義全局變量友善傳位址
     /** 
      * 添加有參和無參構造函數 
      */  
     public ZipImgUtil(){}
     public ZipImgUtil(String imgPath) throws IOException {  
         File file = new File(imgPath);// 讀入檔案  
         img = ImageIO.read(file);      // 構造Image對象  
         width = img.getWidth(null);    // 得到源圖寬  
         height = img.getHeight(null);  // 得到源圖長  
     } 
     /** 
      * 确定是按照寬度還是高度進行壓縮 
      * @param h int 最大高度 
      * @param w int 最大寬度 
      */  
     public void resizeFix(int h, int w) throws IOException {  
         if ( height/ width > h / w) {  
             resizeByWidth(h);  
         } else {  
             resizeByHeight(w);  
         }  
     }  
     /** 
      * 以高度為基準,等比例放縮圖檔 
      * @param h int 新高度 
      */  
     public void resizeByWidth(int h) throws IOException {  
         int w = (int) ( width* h / height);  
         resize(h, w);  
     }  
     /** 
      * 以寬度為基準,等比例縮放圖檔 
     * @param w int 新寬度  
      */  
     public void resizeByHeight(int w) throws IOException {  
         int h = (int) ( height* w /width );  
         resize(h, w);  
     }  
     /** 
      * 進行強制壓縮/放大圖檔到固定的大小 
      * @param w int 新寬度 
      * @param h int 新高度 
      */  
     public void resize(int h, int w) throws IOException {  
     //參數是TYPE_3BYTE_BGR時,圖檔最清晰!
         BufferedImage image = new BufferedImage(w, h,BufferedImage.TYPE_3BYTE_BGR );   
         image.getGraphics().drawImage(img, 0, 0, w,h, null); // 繪制縮小後的圖像  
         //存放的位址
         File destFile = new File(urlImg2);  
         FileOutputStream out = new FileOutputStream(destFile); // 輸出檔案流  
         // 可以正常實作bmp、png、gif、jpg等圖檔壓縮  
         JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
         encoder.encode(image);    //編碼  
         out.close();              //關閉流
     }  
     /**
      * 
      * @方法功能說明: 壓縮圖檔檔案的方法
      * @修改者名字:   yang 
      * @修改日期:        2015-11-11 
      * @修改次數:1
      * @參數: @param  imgPath="F:/123.png";
      * @參數: @throws Exception   
      * @傳回值 void
      */
     public  void comparessImg(String imgPath) throws Exception {  
     //執行個體對象
     StringBuffer img=new StringBuffer(imgPath);
     urlImg2=img.toString();
     //有參構造方法
     ZipImgUtil imgCom = new ZipImgUtil(img.toString());  
     //壓縮
        imgCom.resizeFix(ConstantInfo.IMG_HEIGHT, ConstantInfo.IMG_WIDTH);  
    }
 }