使用 Java 进行图像处理 - 图像编码输出

版权声明:转载时请务必保留以下作者信息和链接
作者:陈维([email protected])作者的网站:http://www.chenwei.mobi

图像编码输出的方法,提供编码进度监听,向图像文件中添加缩略图和设置编码质量的支持(特定格式,例如 JPG)。

这个方法支持的编码格式依赖运行环境里 ImageIO 已经注册 ImageWriter 集合。

Java SE 6 中的 ImageIO 默认支持 JPG, BMP, PNG, GIF 等格式,也可以通过非标准类库添加 ImageIO 对图像格式的支持,比如安装 JAI_ImageIO 。

     /**
     * 编码输出图像。
     * 向图像文件中添加图像缩略图和设置图像压缩质量需要根据具体图像格式。
     * 
     * 
@param out 输出流。
     * 
@param listener 编码输出进度监听器。
     * 
@param formatName 包含格式非正式名称的 String,例如"jpg"。
     * 
@param image 图像。
     * 
@param thumbnails 缩略图集。
     * 
@param quality 压缩质量。
     * 
@throws java.io.IOException
     
*/

    
public   static   void  write(
            ImageOutputStream out,
            IIOWriteProgressListener listener,
            String formatName,
            BufferedImage image,
            List
  extends  BufferedImage >  thumbnails,
            
float  quality)  throws  IOException {
        
if(out == null){
            
throw new IllegalArgumentException("OutputStream must be non null");
        }

        
        
if(formatName == null){
            
throw new IllegalArgumentException("FormatName must be non null");
        }

        
        
if(image == null){
            
throw new IllegalArgumentException("Image must be non null");
        }

        
        
// 取得合适的 ImageWriter。
        Iterator writers = ImageIO.getImageWritersByFormatName(formatName);
        
if (writers == null || !writers.hasNext()) {
            
throw new IllegalStateException("No " + formatName + " writers!");
        }

        ImageWriter writer 
= (ImageWriter) writers.next();
        
        ImageTypeSpecifier imageType 
= ImageTypeSpecifier.createFromRenderedImage(image);
        IIOMetadata metadata 
= writer.getDefaultImageMetadata(imageType, null);
        
        IIOImage iioImage 
= new IIOImage(image, thumbnails, metadata);
        
        ImageWriteParam param 
= writer.getDefaultWriteParam();
        param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        param.setCompressionQuality(quality);
        
        writer.setOutput(out);
        writer.addIIOWriteProgressListener(listener);
        writer.write(
null, iioImage, param);
        writer.dispose();
    }

 

 

你可能感兴趣的:(Java,2D)