package com.mobi5.commons.utils;
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 java.io.InputStream;
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 width
* 寬度
* @param height
* 高度
* @param quality
* 品質
* @param smallIcon
* 小圖片的尾碼
* @return 返回壓縮後的檔案的全路徑
*/
public static String zipImageFile(String oldFile, int width, int height,
float quality, String smallIcon) {
if (oldFile == null) {
return null;
}
String newImage = null;
try {
/** 對伺服器上的臨時檔案進行處理 */
Image srcFile = ImageIO.read(new File(oldFile));
/** 寬,高設定 */
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(newImage);
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;
}
/**
* 儲存檔案到伺服器臨時路徑
*
* @param fileName
* @param is
* @return 檔案全路徑
*/
public static String writeFile(String fileName, InputStream is) {
if (fileName == null || fileName.trim().length() == 0) {
return null;
}
try {
/** 首先儲存到臨時檔案 */
FileOutputStream fos = new FileOutputStream(fileName);
byte[] readBytes = new byte[512];// 緩衝大小
int readed = 0;
while ((readed = is.read(readBytes)) > 0) {
fos.write(readBytes, 0, readed);
}
fos.close();
is.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return fileName;
}
}