參考資料寫了一個生成縮略圖的類

寫了有一年多了,還是拿出來,以備後用

 

 

package cn.tofishes.util.image;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
 * 生成圖片縮略圖
 * @author ToFishes
 *
 */
public class ReduceImage {

	/**
	 * 自定義寬高生成縮略圖
	 * @param imgSrc 原圖片的絕對路徑名
	 * @param imgDist 生成縮略圖後的存放絕對路徑名
	 * @param widthDist 縮略圖的寬度
	 * @param heightDist 縮略圖的高度
	 */
	public static void reduceImg(String imgSrc, String imgDist, int widthDist,
			int heightDist) {
		try {
			File srcfile = new File(imgSrc);
			if (!srcfile.exists()) {
				return;
			}
			Image src = javax.imageio.ImageIO.read(srcfile);

			reduceImg(src, imgDist, widthDist, heightDist);

		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}
	/**
	 * 按照圖片原有比例生成圖片縮略圖,maxSize爲圖片高度、寬度的最大值。
	 * @param imgSrc 原圖片的絕對路徑
	 * @param imgDist 生成縮略圖後的存放絕對路徑名
	 * @param maxSize 圖片高度、寬度的最大值。
	 */
	public static void reduceImg(String imgSrc, String imgDist, int maxSize) {
		File srcfile = new File(imgSrc);
		if (!srcfile.exists()) {
			return;
		}
		try {
			Image src = javax.imageio.ImageIO.read(srcfile);
			
			float width = src.getWidth(null);
			float height = src.getHeight(null);
			
			/* 獲得圖片縮放的比例,哪個大就以哪個爲標準
			 * 前面的width或height得設置爲float類型,否則相除得整型0
			 *  */
			float proportion = width > height ? maxSize/width : maxSize/height;

			int widthDist = Math.round(width*proportion);
			int heightDist = Math.round(height*proportion);

			reduceImg(src, imgDist, widthDist, heightDist);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	public static void reduceImg(Image src, String imgDist, int widthDist,
			int heightDist) throws ImageFormatException, IOException {
		
			if (widthDist <= 0 || heightDist <= 0 ) {
				throw new ImageFormatException("縮略圖高寬不能等於小於0");
			}
			BufferedImage tag = new BufferedImage(widthDist, heightDist,
					BufferedImage.TYPE_INT_RGB);

			// tag.getGraphics().drawImage(src.getScaledInstance(widthDist,
			// heightDist, Image.SCALE_SMOOTH), 0, 0, null);
			tag.getGraphics().drawImage(
					src.getScaledInstance(widthDist, heightDist,
							Image.SCALE_AREA_AVERAGING), 0, 0, null);

			FileOutputStream out = new FileOutputStream(imgDist);
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
			encoder.encode(tag);
			out.close();
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {

		String imageSrc = "G:/1218794106_ddvip_459.jpg";
		String imgDist = "G:/1218794106.jpg";
		long start = System.currentTimeMillis();
		ReduceImage.reduceImg(imageSrc, imgDist, 120);
		long end = System.currentTimeMillis();
		System.out.println("耗用時間爲:  --  " + (end - start) + "毫秒");
		System.out.println("耗用時間爲:  --  " + (end - start) / 1000.0 + "秒");
	}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章