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

在某些系统中,需要使用和管理很多图片,现在图片占用的资源空间越来越大,因此需要将图片缩小,特别是一些网站上的相册会有很多的缩略图。
在实现缩略图的过程中,主要使用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();
}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值