为图片文件生成缩略图

package ImageTest;

import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class Test {

	/**
	 * 为图片文件生成缩略图
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			//参数1(源图片路径),参数2 (缩略图路径),参数3(缩略图宽)参数4(缩略图高)
			Test.saveImageAsJpg("E:\\QQ20120612154244.gif", "E:\\test.jpg", 400, 400);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 生成缩略图
	 * @param fromFileStr 源图片路径
	 * @param saveToFileStr 缩略图路径
	 * @param width 缩略图的宽
	 * @param hight 缩略图的高
	 * @throws IOException
	 */
	public static void saveImageAsJpg(String fromFileStr,String saveToFileStr,int width,int hight) throws IOException
	{
		BufferedImage srcImage;
		String imgType="JPEG";
		if(fromFileStr.toLowerCase().endsWith(".png")){
			imgType="PNG";
		}
		File saveFile=new File(saveToFileStr);
		File fromFile=new File(fromFileStr);
		srcImage=ImageIO.read(fromFile);
		if(width>0||hight>0){
			srcImage=resize(srcImage,width,hight);
		}
		ImageIO.write(srcImage, imgType, saveFile);
	}

	/**
	 * 将源图片的BufferedImage对象生成缩略图
	 * @param source 源图片的BufferedImage对象
	 * @param targetW 缩略图的宽
	 * @param targetH 缩略图的高
	 * @return
	 */
	private 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();
		if(sx>sy)
		{
			sx=sy;
			targetW=(int)(sx*source.getWidth());
		}else{
			sy=sx;
			targetH=(int)(sy*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;
	}
	
	
	
}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unifie(缩略图浏览)是一款缩略图查看软件,体积小巧,占用电脑资源少,但能提供给您最快的查看图片缩略图速度。 XP图像缩略图无法显示的解决方法: 可能是装了ACD的原因,文件夹的图片不能预览了,在网上看到一个解决的方法,很不错:) 症状:在XP或者其他操作系统里,在新装的系统里,图片文件文件夹里显示缩略图的时候,你能看到图片的预览图像。但是由于一些原因出现后,这种预览图不再出现,给我们使用图像文件的时候带来了不少的麻烦。 原因:一般情况下,当我们安装了某些看图或者图像处理类软件(如ACDSee或者Photoshop)之后,这些软件会更改文件关联,让自己这为开启某种图像文件格式的主程序。如果用户没用卸载程序而是强行删除这些软件,那么这些程序在Windows注册表中的文件关联还会保留,但由于该程序已被删除,所以Windows将无法打开原先可以支持的图片格式。 解决方法: 在“开始→运行”中输入“regsvr32 shimgvw.dll ”(启用图像预览); 然后运行“regsvr32 shmedia.dll” (启用影像预览)。 操作功后会弹出窗口提示“……中的……功”,按确定即可。 如果要取消预览,比如取消视频预览,运行“regsvr32 /u shmedia.dll”即可。 PS:我试过了,保证好用,有遇到此类问题的朋友不妨一试。 Unifie截图:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值