修改圖片的像素,清晰度
代碼
/**
* 改變圖片 像素
*
* @param file
* @param qality 參數qality是取值0~1範圍內 清晰程度 數值越小分辨率越低
* @param imageType 圖片寫出類型 好比 jpg
* @return
* @throws IOException
*/
public static File compressPictureByQality(File file, float qality,String imageType) throws IOException {
BufferedImage src = null;
FileOutputStream out = null;
ImageWriter imgWrier;
ImageWriteParam imgWriteParams;
logger.info("開始設定壓縮圖片參數");
// 指定寫圖片的方式爲 jpg
imgWrier = ImageIO.getImageWritersByFormatName(imageType).next();
imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(
null);
// 要使用壓縮,必須指定壓縮方式爲MODE_EXPLICIT
imgWriteParams.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
// 這裏指定壓縮的程度,參數qality是取值0~1範圍內,
imgWriteParams.setCompressionQuality(qality);
imgWriteParams.setProgressiveMode(ImageWriteParam.MODE_DISABLED);
ColorModel colorModel = ImageIO.read(file).getColorModel();// ColorModel.getRGBdefault();
imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(
colorModel, colorModel.createCompatibleSampleModel(32, 32)));
logger.info("結束設定壓縮圖片參數");
if (!file.exists()) {
logger.info("Not Found Img File,文件不存在");
throw new FileNotFoundException("Not Found Img File,文件不存在");
} else {
logger.info("圖片轉換前大小" + file.length() + "字節");
src = ImageIO.read(file);
out = new FileOutputStream(file);
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();
logger.info("圖片轉換後大小" + file.length() + "字節");
return file;
}
}
原圖
修改以後的圖