有時候上傳圖片的時候狗热,文件太大卖宠,等到要加載的時候,因為體積太大而加載速度變慢坪稽,同時也會占用服務器的空間曼玩,因此圖片的壓縮就很有必要了
以下這個工具類是公共類鳞骤,可直接使用
鏈接下載
鏈接:http://pan.baidu.com/s/1geLNgCr 密碼:hf9j
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
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.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class Picture {
/**
* 等比例壓縮圖片文件<br> 先保存原文件,再壓縮黍判、上傳
* @param oldFile 要進行壓縮的文件
* @param newFile 新文件
* @param width 寬度 //設置寬度時(高度傳入0豫尽,等比例縮放)
* @param height 高度 //設置高度時(寬度傳入0,等比例縮放)
* @param quality 質(zhì)量
* @return 返回壓縮后的文件的全路徑
* @throws Exception
*/
public static String zipImageFile(File oldFile,File newFile, int width, int height,
float quality) throws Exception {
if (oldFile == null) {
return null;
}
String newImage = null;
try {
/** 對服務器上的臨時文件進行處理 */
Image srcFile = ImageIO.read(oldFile);
int w = srcFile.getWidth(null);
// System.out.println(w);
int h = srcFile.getHeight(null);
// System.out.println(h);
/** 寬,高設定 */
BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(srcFile, 0, 0, width, height, null);
//String filePrex = oldFile.substring(0, oldFile.indexOf('.'));
/** 壓縮后的文件名 */
//newImage = filePrex + smallIcon+ oldFile.substring(filePrex.length());
/** 壓縮之后臨時存放位置 */
FileOutputStream out = new FileOutputStream(newFile);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);
/** 壓縮質(zhì)量 */
jep.setQuality(quality, true);
encoder.encode(tag, jep);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return newImage;
}
public static void main(String[] args) throws Exception {
// System.out.println(Picture.zipImageFile(new File("E:/a.jpg"),new File("E:/a2.jpg"),250, 250, 50f));
}
}
壓縮前后對比
壓縮前
壓縮后