純Java代碼 圖片壓縮

來源:互聯網
上載者:User

Java圖片壓縮代碼

package com.img;

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.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
*
* @author 可樂加糖
*/
public class CompressPicDemo {
     private File file = null; // 檔案對象
         private String inputDir; // 輸入圖路徑
         private String outputDir; // 輸出圖路徑
         private String inputFileName; // 輸入圖檔案名稱
         private String outputFileName; // 輸出圖檔案名稱
         private int outputWidth = 100; // 預設輸出圖片寬
         private int outputHeight = 100; // 預設輸出圖片高
         private boolean proportion = true; // 是否等比縮放標記(預設為等比縮放)
         public CompressPicDemo() { // 初始設定變數
                 inputDir = "";
                 outputDir = "";
                 inputFileName = "";
                 outputFileName = "";
                 outputWidth = 100;
                 outputHeight = 100;
         }
         public void setInputDir(String inputDir) {
                 this.inputDir = inputDir;
         }
         public void setOutputDir(String outputDir) {
                 this.outputDir = outputDir;
         }
         public void setInputFileName(String inputFileName) {
                 this.inputFileName = inputFileName;
         }
         public void setOutputFileName(String outputFileName) {
                 this.outputFileName = outputFileName;
         }
         public void setOutputWidth(int outputWidth) {
                 this.outputWidth = outputWidth;
         }
         public void setOutputHeight(int outputHeight) {
                 this.outputHeight = outputHeight;
         }
         public void setWidthAndHeight(int width, int height) {
                 this.outputWidth = width;
                 this.outputHeight = height;
         }

         /*
          * 獲得圖片大小
          * 傳入參數 String path :圖片路徑
          */
         public long getPicSize(String path) {
                 file = new File(path);
                 return file.length();
         }

         // 圖片處理
         public String compressPic() {
                 try {
                         //獲得源檔案
                         file = new File(inputDir + inputFileName);
                         if (!file.exists()) {
                                 return "";
                         }
                         Image img = ImageIO.read(file);
                         // 判斷圖片格式是否正確
                         if (img.getWidth(null) == -1) {
                                 System.out.println(" can't read,retry!" + "<BR>");
                                 return "no";
                         } else {
                                 int newWidth; int newHeight;
                                 // 判斷是否是等比縮放
                                 if (this.proportion == true) {
                                         // 為等比縮放計算輸出的圖片寬度及高度
                                         double rate1 = ((double) img.getWidth(null)) / (double) outputWidth + 0.1;
                                         double rate2 = ((double) img.getHeight(null)) / (double) outputHeight + 0.1;
                                         // 根據縮放比率大的進行縮放控制
                                         double rate = rate1 > rate2 ? rate1 : rate2;
                                         newWidth = (int) (((double) img.getWidth(null)) / rate);
                                         newHeight = (int) (((double) img.getHeight(null)) / rate);
                                 } else {
                                         newWidth = img.getWidth(null); // 輸出的圖片寬度
                                         newHeight = img.getHeight(null); // 輸出的圖片高度
                                 }
                                 BufferedImage tag = new BufferedImage((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB);

                                 /*
                                 * Image.SCALE_SMOOTH 的縮減演算法 產生縮圖片的平滑度的
                                 * 優先順序比速度高 產生的圖片品質比較好 但速度慢
                                 */
                                 tag.getGraphics().drawImage(img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);
                                 FileOutputStream out = new FileOutputStream(outputDir + outputFileName);
                                 // JPEGImageEncoder可適用於其他圖片類型的轉換
                                 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
                                 encoder.encode(tag);
                                 out.close();
                         }
                 } catch (IOException ex) {
                         ex.printStackTrace();
                 }
                 return "ok";
        }
         public String compressPic (String inputDir, String outputDir, String inputFileName, String outputFileName) {
                 // 輸入圖路徑
                 this.inputDir = inputDir;
                 // 輸出圖路徑
                 this.outputDir = outputDir;
                 // 輸入圖檔案名稱
                 this.inputFileName = inputFileName;
                 // 輸出圖檔案名稱
                 this.outputFileName = outputFileName;
                 return compressPic();
         }
         public String compressPic(String inputDir, String outputDir, String inputFileName, String outputFileName, int width, int height, boolean gp) {
                 // 輸入圖路徑
                 this.inputDir = inputDir;
                 // 輸出圖路徑
                 this.outputDir = outputDir;
                 // 輸入圖檔案名稱
                 this.inputFileName = inputFileName;
                 // 輸出圖檔案名稱
                 this.outputFileName = outputFileName;
                 // 設定圖片長寬
                 setWidthAndHeight(width, height);
                 // 是否是等比縮放 標記
                 this.proportion = gp;
                 return compressPic();
         }

         // main測試
         // compressPic(大圖片路徑,產生小圖片路徑,大圖片檔案名稱,產生小圖片文名,產生小圖片寬度,產生小圖片高度,是否等比縮放(預設為true))
         public static void main(String[] arg) {
                 CompressPicDemo mypic = new CompressPicDemo();
                 System.out.println("輸入的圖片大小:" + mypic.getPicSize("e:\\1.jpg")/1024 + "KB");
                mypic.compressPic("e:\\", "e:\\test\\", "1.jpg", "r1.jpg", 120, 120, false);

         }
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.