在某些系統中,須要使用和管理不少圖片,如今圖片佔用的資源空間愈來愈大,所以須要將圖片縮小,特別是一些網站上的相冊會有不少的縮略圖。
在實現縮略圖的過程當中,主要使用BufferedImage和ImageIO兩個類。首先將圖片信息讀取到BufferedImage對象中,接着構造縮略圖的BufferedImage對象,最後將縮略圖輸出。ImageIO類提供了read()和write()方法,用於讀取圖片中的信息。
生成縮略圖的代碼以下:
Java代碼
- 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();
- }
- }
-
-
- }