通過java進行圖片壓縮
專案中需要將圖片進行壓縮,從而提高頁面載入速度。(本方法不改變圖片畫素,只改變圖片質量,效果還算理想!)
package ydysz.tools;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
/**
* 圖片壓縮
* 畫素不變,記憶體壓縮
* @author dellpc
*/
public class ImagecompressPic{
public static boolean compressPic(String srcFilePath, String descFilePath) throws IOException {
File file = null;
BufferedImage src = null;
FileOutputStream out = null;
ImageWriter imgWrier;
ImageWriteParam imgWriteParams;
// 指定寫圖片的方式為 jpg
imgWrier = ImageIO.getImageWritersByFormatName("jpg").next();
imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(
null);
// 要使用壓縮,必須指定壓縮方式為MODE_EXPLICIT
imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);
// 這裡指定壓縮的程度,引數qality是取值0~1範圍內,
imgWriteParams.setCompressionQuality((float)0.1);
imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED);
ColorModel colorModel = ImageIO.read(new File(srcFilePath)).getColorModel();// ColorModel.getRGBdefault();
// 指定壓縮時使用的色彩模式
// imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(
// colorModel, colorModel.createCompatibleSampleModel(16, 16)));
imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(
colorModel, colorModel.createCompatibleSampleModel(16, 16)));
try {
if (isBlank(srcFilePath)) {
return false;
} else {
file = new File(srcFilePath);
src = ImageIO.read(file);
out = new FileOutputStream(descFilePath);
imgWrier.reset();
// 必須先指定 out值,才能呼叫write方法, ImageOutputStream可以通過任何
// OutputStream構造
imgWrier.setOutput(ImageIO.createImageOutputStream(out));
// 呼叫write方法,就可以向輸入流寫圖片
imgWrier.write(null, new IIOImage(src, null, null),
imgWriteParams);
out.flush();
out.close();
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public static boolean isBlank(String string) {
if (string == null || string.length() == 0 || string.trim().equals("")) {
return true;
}
return false;
}
public static void main(String[] args) {
try {
ImagecompressPic.compressPic("C:\\Users\\dellpc\\Desktop\\test.jpg", "C:\\Users\\dellpc\\Desktop\\CC.jpg");
} catch (IOException e) {
e.printStackTrace();
}
}
}