public static void saveWithQuality(BufferedImage im, float quality, String outputImageFile) {
String formatname=outputImageFile.substring(outputImageFile.lastIndexOf("."+1));
///FileOutputStream newImage = null;
try {
/* 输出到文件流 */
//newImage = new FileOutputStream(outputImageFile);
//JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newImage);
//JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(im);
/* 压缩质量, 0.75 就算是高质量 */
//jep.setQuality(quality, true); // jep.setQuality(0.9f, true);
//encoder.encode(im, jep);
/* 近JPEG编码 */
// newImage.close();
int width=im.getWidth();
int height=im.getHeight();
width=parseDoubleToInt(width*quality);
height=parseDoubleToInt(height*quality);
Image image=im.getScaledInstance(width,height, Image.SCALE_SMOOTH);
BufferedImage outputImage=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics graphics=outputImage.getGraphics();
graphics.drawImage(image,0,0,null);
graphics.dispose();
ImageIO.write(outputImage,formatname,new File(outputImageFile));
} catch (Exception e) {
throw new RuntimeException(e);
}
/* finally {
//if (newImage != null) {
// try {newImage.close();} catch (IOException e) {throw new RuntimeException(e);}
//}
}*/
}报错的主要是JPEGImageEncoder在jdk1.7中已经被移除了,试了各种配置方法也没解决,参考了ImageIO的写法,修改了其中保存图片的代码。注释部分为原来的代码,并未直接删除,供参考,同时增加一个数值转换的方法:
/**
* 将double类型的数据转换为int,四舍五入原则
*
* @param sourceDouble
* @return
*/
private static int parseDoubleToInt(double sourceDouble) {
int result = 0;
result = (int) sourceDouble;
return result;
}目前来看,问题解决,源码也正常在IDEA下跑起来了。
请波总指导一下,看看代码写的是否有问题~~~~~~
想拥有club源码的请 点击首页的 “俱乐部”,加入即可下载。