中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

jpg圖像文件縮放Java類(按指定比例縮放,按指定寬高縮放)

2018-07-20    來(lái)源:open-open

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

/**
 * jpg圖像文件縮放類
 * 
 * 本類實(shí)現(xiàn)一個(gè)對(duì) JPG/JPEG 圖像文件進(jìn)行縮放處理的方法 即給定一個(gè) JPG 文件,可以生成一個(gè)該 JPG 文件的縮影圖像文件 (JPG 格式 )
 * 提供三種生成縮影圖像的方法: 1 、設(shè)置縮影文件的寬度,根據(jù)設(shè)置的寬度和源圖像文件的大小來(lái)確定新縮影文件的長(zhǎng)度來(lái)生成縮影圖像 2
 * 、設(shè)置縮影文件的長(zhǎng)度,根據(jù)設(shè)置的長(zhǎng)度和源圖像文件的大小來(lái)確定新縮影文件的寬度來(lái)生成縮影圖像 3
 * 、設(shè)置縮影文件相對(duì)于源圖像文件的比例大小,根據(jù)源圖像文件的大小及設(shè)置的比例來(lái)確定新縮影文件的大小來(lái)生成縮影圖像
 * 新生成的縮影圖像可以比原圖像大,這時(shí)即是放大源圖像。
 */
public class JPGTransformer {
	// 對(duì)象是否己經(jīng)初始化
	private boolean isInitFlag = false;

	// 定義生目標(biāo)圖片的寬度和高度,給其一個(gè)就可以了
	private int targetPicWidth = 0;
	private int targetPicHeight = 0;

	// 定義目標(biāo)圖片的相比原圖片的比例
	private double picScale = 0;

	/**
	 * 構(gòu)造函數(shù)
	 */
	public JPGTransformer() {
		this.isInitFlag = false;
	}

	/**
	 * 重置JPG圖片縮放器
	 */
	public void resetJPGTransformer() {
		this.picScale = 0;
		this.targetPicWidth = 0;
		this.targetPicHeight = 0;
		this.isInitFlag = false;
	}

	/**
	 * 設(shè)置目標(biāo)圖片相對(duì)于源圖片的縮放比例
	 * 
	 * @param scale
	 * @throws JPGException
	 */
	public void setPicScale(double scale) throws JPGException {
		if (scale <= 0) {
			throw new JPGException(" 縮放比例不能為0和負(fù)數(shù)! ");
		}

		this.resetJPGTransformer();
		this.picScale = scale;
		this.isInitFlag = true;
	}

	/**
	 * 設(shè)置目標(biāo)圖片的寬度
	 * 
	 * @param width
	 * @throws JPGException
	 */
	public void SetSmallWidth(int width) throws JPGException {
		if (width <= 0) {
			throw new JPGException(" 縮影圖片的寬度不能為 0 和負(fù)數(shù)! ");
		}

		this.resetJPGTransformer();
		this.targetPicWidth = width;
		this.isInitFlag = true;
	}

	/**
	 * 設(shè)置目標(biāo)圖片的高度
	 * 
	 * @param height
	 * @throws JPGException
	 */
	public void SetSmallHeight(int height) throws JPGException {
		if (height <= 0) {
			throw new JPGException(" 縮影圖片的高度不能為 0 和負(fù)數(shù)! ");
		}

		this.resetJPGTransformer();
		this.targetPicHeight = height;
		this.isInitFlag = true;
	}

	/**
	 * 開始縮放圖片
	 * 
	 * @param srcPicFileName
	 *            源圖片的文件名
	 * @param targetPicFileName
	 *            生成目標(biāo)圖片的文件名
	 * @throws JPGException
	 */
	public void transform(String srcPicFileName, String targetPicFileName)
			throws JPGException {

		if (!this.isInitFlag) {
			throw new JPGException(" 對(duì)象參數(shù)沒有初始化! ");
		}
		if (srcPicFileName == null || targetPicFileName == null) {
			throw new JPGException(" 包含文件名的路徑為空! ");
		}
		if ((!srcPicFileName.toLowerCase().endsWith("jpg"))
				&& (!srcPicFileName.toLowerCase().endsWith("jpeg"))) {
			throw new JPGException(" 只能處理 JPG/JPEG 文件! ");
		}
		if ((!targetPicFileName.toLowerCase().endsWith("jpg"))
				&& !targetPicFileName.toLowerCase().endsWith("jpeg")) {
			throw new JPGException(" 只能處理 JPG/JPEG 文件! ");
		}

		// 新建源圖片和生成圖片的文件對(duì)象
		File fin = new File(srcPicFileName);
		File fout = new File(targetPicFileName);

		// 通過(guò)緩沖讀入源圖片文件
		BufferedImage bSrc = null;
		try {
			// 讀取文件生成BufferedImage
			bSrc = ImageIO.read(fin);
		} catch (IOException ex) {
			throw new JPGException(" 讀取源圖像文件出錯(cuò)! ");
		}
		// 源圖片的寬度和高度
		int srcW = bSrc.getWidth();
		int srcH = bSrc.getHeight();

		// 設(shè)置目標(biāo)圖片的實(shí)際寬度和高度
		int targetW = 0;
		int targetH = 0;
		if (this.targetPicWidth != 0) {
			// 根據(jù)設(shè)定的寬度求出長(zhǎng)度
			targetW = this.targetPicWidth;
			targetH = (targetW * srcH) / srcW;
		} else if (this.targetPicHeight != 0) {
			// 根據(jù)設(shè)定的長(zhǎng)度求出寬度
			targetH = this.targetPicHeight;
			targetW = (targetH * srcW) / srcH;
		} else if (this.picScale != 0) {
			// 根據(jù)設(shè)置的縮放比例設(shè)置圖像的長(zhǎng)和寬
			targetW = (int) ((float) srcW * this.picScale);
			targetH = (int) ((float) srcH * this.picScale);
		} else {
			throw new JPGException(" 對(duì)象參數(shù)初始化不正確! ");
		}

		System.out.println(" 源圖片的分辨率: " + srcW + "×" + srcH);
		System.out.println(" 目標(biāo)圖片的分辨率: " + targetW + "×" + targetH);
		// 目標(biāo)圖像的緩沖對(duì)象
		BufferedImage bTarget = new BufferedImage(targetW, targetH,
				BufferedImage.TYPE_3BYTE_BGR);

		// 求得目標(biāo)圖片與源圖片寬度、高度的比例。
		double sx = (double) targetW / srcW;
		double sy = (double) targetH / srcH;

		// 構(gòu)造圖像變換對(duì)象
		AffineTransform transform = new AffineTransform();
		// 設(shè)置圖像轉(zhuǎn)換的比例
		transform.setToScale(sx, sy);

		// 構(gòu)造圖像轉(zhuǎn)換操作對(duì)象
		AffineTransformOp ato = new AffineTransformOp(transform, null);
		// 實(shí)現(xiàn)轉(zhuǎn)換,將bSrc轉(zhuǎn)換成bTarget
		ato.filter(bSrc, bTarget);

		// 輸出目標(biāo)圖片
		try {
			// 將目標(biāo)圖片的BufferedImage寫到文件中去,jpeg為圖片的格式
			ImageIO.write(bTarget, "jpeg", fout);
		} catch (IOException ex1) {
			throw new JPGException(" 寫入縮略圖像文件出錯(cuò)! ");
		}
	}

	/**
	 * JPG縮放時(shí)可能出現(xiàn)的異常
	 */
	class JPGException extends Exception {
		public JPGException(String msg) {
			super(msg);
		}

		public JPGException(Exception e) {
			super(e);
		}

		public JPGException(Throwable t) {
			super(t);
		}

		public JPGException(String msg, Throwable t) {
			super(msg, t);
		}
	}

	/**
	 * 測(cè)試文件為: C:/temp/scenery.jpg
	 * 
	 * @param args
	 * @throws JPGException
	 */
	public static void main(String[] args) throws JPGException {
		JPGTransformer jpg = new JPGTransformer();

		jpg.setPicScale(0.5); // 將原圖片縮小一半
		String srcFileName = "C:/temp/scenery.jpg";
		String targetFileName = "C:/temp/scenery_new.jpg";
		jpg.transform(srcFileName, targetFileName);
	}
}

標(biāo)簽:

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:一個(gè)精美的java時(shí)鐘 (自動(dòng)換背景 秒針平滑移動(dòng))

下一篇:javascript 下雪效果 特效