如何爲圖片文件生成縮略圖

      在某些系統中,須要使用和管理不少圖片,如今圖片佔用的資源空間愈來愈大,所以須要將圖片縮小,特別是一些網站上的相冊會有不少的縮略圖。 

      在實現縮略圖的過程當中,主要使用BufferedImage和ImageIO兩個類。首先將圖片信息讀取到BufferedImage對象中,接着構造縮略圖的BufferedImage對象,最後將縮略圖輸出。ImageIO類提供了read()和write()方法,用於讀取圖片中的信息。 
生成縮略圖的代碼以下: 
Java代碼   收藏代碼
  1. import javax.imageio.ImageIO;  
  2. import java.awt.image.BufferedImage;  
  3. import java.awt.image.ColorModel;  
  4. import java.awt.image.WritableRaster;  
  5. import java.awt.*;  
  6. import java.awt.geom.AffineTransform;  
  7. import java.io.InputStream;  
  8. import java.io.File;  
  9. import java.io.FileOutputStream;  
  10.   
  11.   
  12. public class ImageTest{  
  13.     /** 
  14.      *生成縮略圖 
  15.      *fromFileStr:源圖片路徑 
  16.      *saveToFileStr:縮略圖路徑 
  17.      *width:縮略圖的寬 
  18.      *hight:縮略圖的高 
  19.      */  
  20.   
  21.      public static void saveImageAsJpg(String fromFileStr,String saveToFileStr,int width,int hight)   
  22. throws Exception{  
  23.         BufferedImage srcImage;  
  24.         String imgType="JPEG";  
  25.         if(fromFileStr.toLowerCase().endsWith(".png"));{  
  26.             imgType="PNG";  
  27.         }  
  28.         File fromFile=new File(fromFileStr);  
  29.         File saveFile=new File(saveToFileStr);  
  30.         srcImage=ImageIO.read(fromFile);  
  31.         if(width>0||hight>0){  
  32.             srcImage=resize(srcImage,width,hight);  
  33.         }  
  34.         ImageIO.write(srcImage,imgType,saveFile);  
  35.   
  36.      }  
  37.   
  38.   
  39.      /** 
  40.       *將源圖片的BufferedImage對象生成縮略圖 
  41.       *source:源圖片的BufferedImage對象 
  42.       *targetW:縮略圖的寬 
  43.       *targetH:縮略圖的高 
  44.       */  
  45.   
  46.   
  47.       public static BufferedImage resize(BufferedImage source,int targetW,int targetH){  
  48.         int type=source.getType();  
  49.         BufferedImage target=null;  
  50.         double sx=(double)targetW/source.getWidth();  
  51.         double sy=(double)targetH/source.getHeight();  
  52.         //這裏想實如今targetW,targetH範圍內實現等比例的縮放。  
  53.              //若是不須要等比例的縮放則下面的if else語句註釋掉便可  
  54.   
  55.         if(sx>sy){  
  56.             sx=sy;  
  57.             targetW=(int)(sx*source.getWidth());  
  58.         }  
  59.         else {  
  60.             sy=sx;  
  61.             targetH=(int)(sx*source.getHeight());  
  62.         }  
  63.         if(type==BufferedImage.TYPE_CUSTOM){  
  64.             ColorModel cm =source.getColorModel();  
  65.             WritableRaster raster=cm.createCompatibleWritableRaster(targetW,targetH);  
  66.             boolean alphaPremultiplied=cm.isAlphaPremultiplied();  
  67.             target=new BufferedImage(cm,raster,alphaPremultiplied,null);  
  68.         }  
  69.         else  
  70.             target =new BufferedImage(targetW,targetH,type);  
  71.             Graphics2D g=target.createGraphics();  
  72.             g.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);  
  73.             g.drawRenderedImage(source,AffineTransform.getScaleInstance(sx,sy));  
  74.             g.dispose();  
  75.             return target;  
  76.   
  77.         }  
  78.         public static void main(String args[]){  
  79.             try{  
  80.                 ImageTest.saveImageAsJpg("C:\\Users\\h-xxw\\Desktop\\Vedio\\eq.jpg",  
  81.          "D:\\basic\\bihao.jpg",100,100);  
  82.             }  
  83.             catch(Exception e){  
  84.                 e.printStackTrace();  
  85.             }  
  86.         }  
  87.   
  88.   
  89. }  
相關文章
相關標籤/搜索