Java圖片上傳壓縮處理
我們在項目中經常會出現圖片的上傳、壓縮處理的情況,例如等比例壓縮、按照一定的寬度和高度壓縮等,公共代碼如下:
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 ImageZipUtil {
/**
* 等比例壓縮圖片文件<br> 先保存原文件,再壓縮、上傳
* @param oldFile 要進行壓縮的文件
* @param newFile 新文件
* @param width 寬度 //設置寬度時(高度傳入0,等比例縮放)
* @param height 高度 //設置高度時(寬度傳入0,等比例縮放)
* @param quality 質量
* @return 返回壓縮后的文件的全路徑
*/
public static String zipImageFile(File oldFile,File newFile, int width, int height,
float quality) {
if (oldFile == null) {
return 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);
double bili;
if(width>0){
bili=width/(double)w;
height = (int) (h*bili);
}else{
if(height>0){
bili=height/(double)h;
width = (int) (w*bili);
}
}
/** 寬,高設定 */
BufferedImage tag = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(srcFile, 0, 0, width, height, null);
//String filePrex = oldFile.getName().substring(0, oldFile.getName().indexOf('.'));
/** 壓縮后的文件名 */
//newImage = filePrex + smallIcon+ oldFile.getName().substring(filePrex.length());
/** 壓縮之后臨時存放位置 */
FileOutputStream out = new FileOutputStream(newFile);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);
/** 壓縮質量 */
jep.setQuality(quality, true);
encoder.encode(tag, jep);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return newFile.getAbsolutePath();
}
/**
* 按寬度高度壓縮圖片文件<br> 先保存原文件,再壓縮、上傳
* @param oldFile 要進行壓縮的文件全路徑
* @param newFile 新文件
* @param width 寬度
* @param height 高度
* @param quality 質量
* @return 返回壓縮后的文件的全路徑
*/
public static String zipWidthHeightImageFile(File oldFile,File newFile, int width, int height,
float quality) {
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);
/** 壓縮質量 */
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 IOException {
//System.out.println(ImageZipUtil.zipWidthHeightImageFile(new File("E:/c.jpg"),new File("E:/c2.jpg"), 120, 128, 3f));
} 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!