/**
* @Title: compressPicByQuality
* @Description: 壓縮圖片,通過壓縮圖片質量,保持原圖大小
* @param quality:0-1
* @return byte[]
* @throws
*/
public static byte[] compressPicByQuality(File file, float quality) {
byte[] inByte = null;
try {
BufferedImage image = ImageIO.read(file);
// 如果圖片空,返回空
if (image == null) {
return null;
}
// 得到指定Format圖片的writer
Iterator<ImageWriter> iter = ImageIO
.getImageWritersByFormatName("jpeg");// 得到迭代器
ImageWriter writer = (ImageWriter) iter.next(); // 得到writer
// 得到指定writer的輸出參數設置(ImageWriteParam )
ImageWriteParam iwp = writer.getDefaultWriteParam();
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); // 設置可否壓縮
iwp.setCompressionQuality(quality); // 設置壓縮質量參數
iwp.setProgressiveMode(ImageWriteParam.MODE_DISABLED);
ColorModel colorModel = ColorModel.getRGBdefault();
// 指定壓縮時使用的色彩模式
iwp.setDestinationType(new javax.imageio.ImageTypeSpecifier(colorModel,
colorModel.createCompatibleSampleModel(16, 16)));
// 開始打包圖片,寫入byte[]
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); // 取得內存輸出流
IIOImage iIamge = new IIOImage(image, null, null);
// 此處因爲ImageWriter中用來接收write信息的output要求必須是ImageOutput
// 通過ImageIo中的靜態方法,得到byteArrayOutputStream的ImageOutput
writer.setOutput(ImageIO
.createImageOutputStream(byteArrayOutputStream));
writer.write(null, iIamge, iwp);
inByte = byteArrayOutputStream.toByteArray();
} catch (IOException e) {
System.out.println("write errro");
e.printStackTrace();
}
return inByte;
}
圖片壓縮存儲空間
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.