如何为图片文件生成缩略图

      在某些系统中,需要使用和管理很多图片,现在图片占用的资源空间越来越大,因此需要将图片缩小,特别是一些网站上的相册会有很多的缩略图。 

      在实现缩略图的过程中,主要使用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. }  

转载于:https://my.oschina.net/u/1157906/blog/157549

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值