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源码的请 点击首页的 “俱乐部”,加入即可下载。