图片压缩和缩略图[JAVA]

图片压缩和缩略图[JAVA]

最近工作需要对服务器上面的文件进行压缩,并且把原来一些缩略图进行压缩。贴出代码片断供大家交流。
搜略图实现规定大小画布上缩小图片,方便列表显示。
图片压缩提供了2种方法。1、可以自定义压缩比。2、采用ImageIO进行默认压缩(更安全一些,不会出现内存溢出)。

     private   void  doThumbCompress(File file) {
        
        BufferedImage bis
= null ;
        
        BufferedImage bid
= null ;
        
        
try {

            
int  nw =   113 //  定义宽为113
             int  nh =   84 //   定义高为84
            
            bis 
=  ImageIO.read(file);
            
int  c_w =  bis.getWidth();
            
int  c_h =  bis.getHeight();

            
if (c_w < 114   &&  file.length() < MIN_LENGTH) {        
                bis 
=   null ;
                
return ;
            }

            
if (c_w > WIDTH) {
                nw  
=  WIDTH;
                nh 
=  c_h  *  (WIDTH) / c_w;
                c_h
= nh;
                c_w
= nw;
            }
    
            
            
if (c_h > HEIGHT) {
                nh 
=  HEIGHT;
                nw  
=  c_w  *  (HEIGHT) / c_h;             
            }

            
            
            
            bid
=   new  BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_INT_RGB);                        
            Graphics g 
=  bid.getGraphics();

            g.setColor(Color.white);

            g.fillRect(
0 , 0 , WIDTH, HEIGHT);
            
            g.drawImage(bis,(WIDTH
- nw) / 2 , 0 ,nw,nh, null );
            
            
            
            
long  oldFileSize = file.length();
            
             
            
if (isOverlay) {
                ImageIO.write(bid, 
" jpeg " , file);
            }
  else {
                ImageIO.write(ImageIO.read(file), 
" jpeg " new  File(outPath
                                
+ File.separator + file.getName()));
            }

            
long  newFileSize = file.length();
            log(
" ok: " + file + " \t " + oldFileSize + " \t " + newFileSize);
        }
  catch  (Exception e) {
            log(file
+ "  error: " + e.getMessage());
             
        }

        
        
        bis
= null ;
        
        bid
= null ;
    }

        

     压缩图片代码:
     /** */ /**
     * 可以自定义压缩比例
     * 
@param file
     
*/

    
private   void  doCompressQuality(File file)   {
        BufferedImage src 
= null;
        FileOutputStream out 
=  null;
        JPEGImageEncoder encoder 
= null;
        JPEGEncodeParam  param   
= null;
        
        
try{
            src
= ImageIO.read(file);//or png.
            if(isOverlay){
                out
= new FileOutputStream(file);
            }
else{
                out
= new FileOutputStream(outPath+File.separator+file.getName());
            }

            encoder
= JPEGCodec.createJPEGEncoder(out);
            param
= encoder.getDefaultJPEGEncodeParam(src);            
            param.setQuality(imageQuality, 
false);
            encoder.setJPEGEncodeParam(param);            
            encoder.encode(src);
//近JPEG编码
            out.close();
            
//ImageIO.write(src, "jpeg", new File(outPath+File.separator+file.getName()));            
            log("over:"+file.getPath());
        }
 catch (IOException e){
            log(
"compress error:"+file.getPath()+";error:"+e.getMessage());
        }

        out 
= null;
        encoder 
= null;
        param   
= null;
        src     
= null;
    }


    
/** */ /**
     * 压缩图片,默认压缩比例75%
     * 
@param file
     
*/

    
private   void  doCompress(File file) {
        File descFile 
= null;
        
boolean writeOk=false;
        
long fileSize=file.length();

        
try{
            
            
if(isOverlay){                
                descFile 
= file;
                writeOk 
= ImageIO.write(ImageIO.read(file), "jpeg", descFile);
            }
else{
                descFile 
= new File(outPath+File.separator+file.getName());
                writeOk 
= ImageIO.write(ImageIO.read(file), "jpeg", descFile);
            }
        
            
            
if(writeOk){
                log(
"ok:"+file.getPath()+"\t"+fileSize+"\t"+descFile.length());
            }
else{
                log(
"fail:"+file.getPath()+"\t"+fileSize+"\t"+descFile.length());
            }
            
            
        }
 catch (Exception e){
            log(
"compress error:"+file.getPath()+";descFile="+descFile+";error:"+e.getMessage());
        }

        descFile
=null;
    }

你可能感兴趣的:(图片压缩和缩略图[JAVA])