`
kingxianstar
  • 浏览: 19706 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

阅读更多
      在某些系统中,需要使用和管理很多图片,现在图片占用的资源空间越来越大,因此需要将图片缩小,特别是一些网站上的相册会有很多的缩略图。
      在实现缩略图的过程中,主要使用BufferedImage和ImageIO两个类。首先将图片信息读取到BufferedImage对象中,接着构造缩略图的BufferedImage对象,最后将缩略图输出。ImageIO类提供了read()和write()方法,用于读取图片中的信息。
生成缩略图的代码如下:
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.io.InputStream;
import java.io.File;
import java.io.FileOutputStream;


public class ImageTest{
	/**
	 *生成缩略图
	 *fromFileStr:源图片路径
	 *saveToFileStr:缩略图路径
	 *width:缩略图的宽
	 *hight:缩略图的高
	 */

	 public static void saveImageAsJpg(String fromFileStr,String saveToFileStr,int width,int hight) 
throws Exception{
	 	BufferedImage srcImage;
	 	String imgType="JPEG";
	 	if(fromFileStr.toLowerCase().endsWith(".png"));{
	 		imgType="PNG";
	 	}
	 	File fromFile=new File(fromFileStr);
	 	File saveFile=new File(saveToFileStr);
	 	srcImage=ImageIO.read(fromFile);
	 	if(width>0||hight>0){
	 		srcImage=resize(srcImage,width,hight);
	 	}
	 	ImageIO.write(srcImage,imgType,saveFile);

	 }


	 /**
	  *将源图片的BufferedImage对象生成缩略图
	  *source:源图片的BufferedImage对象
	  *targetW:缩略图的宽
	  *targetH:缩略图的高
	  */


	  public static BufferedImage resize(BufferedImage source,int targetW,int targetH){
	  	int type=source.getType();
	  	BufferedImage target=null;
	  	double sx=(double)targetW/source.getWidth();
	  	double sy=(double)targetH/source.getHeight();
	  	//这里想实现在targetW,targetH范围内实现等比例的缩放。
             //如果不需要等比例的缩放则下面的if else语句注释掉即可

	  	if(sx>sy){
	  		sx=sy;
	  		targetW=(int)(sx*source.getWidth());
	  	}
	  	else {
	  		sy=sx;
	  		targetH=(int)(sx*source.getHeight());
	  	}
	  	if(type==BufferedImage.TYPE_CUSTOM){
	  		ColorModel cm =source.getColorModel();
	  		WritableRaster raster=cm.createCompatibleWritableRaster(targetW,targetH);
	  		boolean alphaPremultiplied=cm.isAlphaPremultiplied();
	  		target=new BufferedImage(cm,raster,alphaPremultiplied,null);
	  	}
	  	else
	  		target =new BufferedImage(targetW,targetH,type);
	  		Graphics2D g=target.createGraphics();
	  		g.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
	  		g.drawRenderedImage(source,AffineTransform.getScaleInstance(sx,sy));
	  		g.dispose();
	  		return target;

	  	}
	  	public static void main(String args[]){
	  		try{
	  			ImageTest.saveImageAsJpg("C:\\Users\\h-xxw\\Desktop\\Vedio\\eq.jpg",
         "D:\\basic\\bihao.jpg",100,100);
	  		}
	  		catch(Exception e){
	  			e.printStackTrace();
	  		}
	  	}


}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics