随笔-60  评论-35  文章-15  trackbacks-0
import  java.io. * ;
import  java.awt. * ;
import  java.awt.image. * ;
import  com.sun.image.codec.jpeg. * ;
/**
 *
 * <p>Title: Thumbnail</p>
 *
 * <p>Description: Picture Thumbnail</p>
 *
 * <p>Copyright: Copyright (c) 54powerman@163.com 2005</p>
 *
 * <p>Company: 
http://blog.sina.com.cn/u1055000490 </p>
 *
 * 
@author  54powerman
 * 
@version  1.0
 
*/

public   class  Thumbnail  {
  
private  String srcFile;
  
private  String destFile;
  
private   int  width;
  
private   int  height;
  
private  Image img;
  
public   static   void  main(String[] args)  throws  Exception  {
    Thumbnail thum 
=   new  Thumbnail( " Winter.png " );
    thum.resizeFix(
500 300 );
  }

  
/**
   * 构造函数
   * 
@param  fileName String
   * 
@throws  IOException
   
*/

  
public  Thumbnail(String fileName)  throws  IOException  {
    File _file 
=   new  File(fileName);  // 读入文件
     this .srcFile  =  _file.getName();
    
this .destFile  =   this .srcFile.substring( 0 this .srcFile.lastIndexOf( " . " ))  +
        
" _s.jpg " ;
    img 
=  javax.imageio.ImageIO.read(_file);  // 构造Image对象
    width  =  img.getWidth( null );  // 得到源图宽
    height  =  img.getHeight( null );  // 得到源图长
  }

  
/**
   * 强制压缩/放大图片到固定的大小
   * 
@param  w int 新宽度
   * 
@param  h int 新高度
   * 
@throws  IOException
   
*/

  
public   void  resize( int  w,  int  h)  throws  IOException  {
    BufferedImage _image 
=   new  BufferedImage(w, h,
                                             BufferedImage.TYPE_INT_RGB);
    _image.getGraphics().drawImage(img, 
0 0 , w, h,  null );  // 绘制缩小后的图
    FileOutputStream out  =   new  FileOutputStream(destFile);  // 输出到文件流
    JPEGImageEncoder encoder  =  JPEGCodec.createJPEGEncoder(out);
    encoder.encode(_image); 
// 近JPEG编码
    out.close();
  }

  
/**
   * 按照固定的比例缩放图片
   * 
@param  t double 比例
   * 
@throws  IOException
   
*/

  
public   void  resize( double  t)  throws  IOException  {
    
int  w  =  ( int ) (width  *  t);
    
int  h  =  ( int ) (height  *  t);
    resize(w, h);
  }

  
/**
   * 以宽度为基准,等比例放缩图片
   * 
@param  w int 新宽度
   * 
@throws  IOException
   
*/

  
public   void  resizeByWidth( int  w)  throws  IOException  {
    
int  h  =  ( int ) (height  *  w  /  width);
    resize(w, h);
  }

  
/**
   * 以高度为基准,等比例缩放图片
   * 
@param  h int 新高度
   * 
@throws  IOException
   
*/

  
public   void  resizeByHeight( int  h)  throws  IOException  {
    
int  w  =  ( int ) (width  *  h  /  height);
    resize(w, h);
  }

  
/**
   * 按照最大高度限制,生成最大的等比例缩略图
   * 
@param  w int 最大宽度
   * 
@param  h int 最大高度
   * 
@throws  IOException
   
*/

  
public   void  resizeFix( int  w,  int  h)  throws  IOException  {
    
if  (width  /  height  >  w  /  h)  {
      resizeByWidth(w);
    }

    
else   {
      resizeByHeight(h);
    }

  }

  
/**
   * 设置目标文件名
   * setDestFile
   * 
@param  fileName String 文件名字符串
   
*/

  
public   void  setDestFile(String fileName)  throws  Exception  {
    
if  ( ! fileName.endsWith( " .jpg " ))  {
      
throw   new  Exception( " Dest File Must end with \ " .jpg\ " . " );
    }

    destFile 
=  fileName;
  }

  
/**
   * 获取目标文件名
   * getDestFile
   
*/

  
public  String getDestFile()  {
    
return  destFile;
  }

  
/**
   * 获取图片原始宽度
   * getSrcWidth
   
*/

  
public   int  getSrcWidth()  {
    
return  width;
  }

  
/**
   * 获取图片原始高度
   * getSrcHeight
   
*/

  
public   int  getSrcHeight()  {
    
return  height;
  }

}
posted on 2006-04-04 17:06 Q系列类、方法、变量…… 阅读(1579) 评论(1)  编辑  收藏 所属分类: 网上工具代码

评论:
# re: Java缩略图类 2008-07-21 22:43 | kangwei
谢谢!我还没有运行  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: