【引自键盘上的舞者 的博客】图像编码输出的方法,提供编码进度监听,设置编码质量的支持(特定格式,例如JPG)。
这个方法支持的编码格式依赖运行环境里ImageIO已经注册ImageWriter集合。
Java SE 6中的ImageIO默认支持JPG,BMP,PNG,GIF等格式,也可以通过非标准类库添加ImageIO对图像格式的支持,比如安装JAI_ImageIO。
/** *//** * 将BufferedImage编码输出成硬盘上的图像文件。 * 这个方法支持的编码格式依赖运行环境里ImageIO已经注册ImageWriter集合。 * * @param file编码输出的目标图像文件名,文件名的后缀确定编码格式。 * @param image待编码的图像对象。 * @param quality编码压缩的百分比。 * @param progressListener编码进度的监听器。 * @return返回编码输出成功与否。 */ public boolean writeImageFile(File file, BufferedImage image,
int quality, IIOWriteProgressListener progressListener) ...{ try ...{ String suffix = getFileSuffix(file);
if (suffix == null) ...{ return false; }
Iterator it = ImageIO.getImageWritersBySuffix(suffix); if (it.hasNext()) ...{
FileImageOutputStream fileImageOutputStream =
new FileImageOutputStream(file); ImageWriter iw = (ImageWriter) it.next();
ImageWriteParam iwp = iw.getDefaultWriteParam(); iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); iwp.setCompressionQuality(quality / 100.0f);
iw.setOutput(fileImageOutputStream); iw.addIIOWriteProgressListener(progressListener); iw.write(null, new javax.imageio.IIOImage(image, null, null), iwp); iw.dispose();
fileImageOutputStream.flush(); fileImageOutputStream.close(); } } catch (Exception ex) ...{ ex.printStackTrace(); return false; } return true; } getFileSuffix() 顾名思义,是取得文件后缀的方法。
/** *//** * 取得文件后缀。 * 如果文件输入参数为 null 返回 null。 * * @param file * @return */ public String getFileSuffix(File file) ...{ if (file == null) ...{ return null; } return getFileSuffix(file.getName()); } /** *//** * 取得文件后缀。 * 如果文件名输入为 null 返回 null; * 如果没有取得后缀则返回 ""。 * * @param fileName * @return */ public String getFileSuffix(String fileName) ...{ if (fileName == null) ...{ return null; } String suffix = ""; int i = fileName.lastIndexOf('.'); if (i > 0 && i < fileName.length() - 1) ...{ suffix = fileName.substring(i + 1); } return suffix; }