Java裁剪壓縮PNG圖片,透明背景色變黑問題解決

Java裁剪壓縮PNG圖片,透明背景色變黑問題解決

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

/**
 * 圖片工具類
 */
public class ImageUtil {

	/**
	 * 裁剪PNG圖片工具類
	 * 
	 * @param fromFile
	 *            源文件
	 * @param toFile
	 *            裁剪後的文件
	 * @param outputWidth
	 *            裁剪寬度
	 * @param outputHeight
	 *            裁剪高度
	 * @param proportion
	 *            是否是等比縮放
	 */
	public static void resizePng(File fromFile, File toFile, int outputWidth, int outputHeight,
			boolean proportion) {
		try {
			BufferedImage bi2 = ImageIO.read(fromFile);
			int newWidth;
			int newHeight;
			// 判斷是否是等比縮放
			if (proportion) {
				// 爲等比縮放計算輸出的圖片寬度及高度
				double rate1 = ((double) bi2.getWidth(null)) / (double) outputWidth + 0.1;
				double rate2 = ((double) bi2.getHeight(null)) / (double) outputHeight + 0.1;
				// 根據縮放比率大的進行縮放控制
				double rate = rate1 < rate2 ? rate1 : rate2;
				newWidth = (int) (((double) bi2.getWidth(null)) / rate);
				newHeight = (int) (((double) bi2.getHeight(null)) / rate);
			} else {
				newWidth = outputWidth; // 輸出的圖片寬度
				newHeight = outputHeight; // 輸出的圖片高度
			}
			BufferedImage to = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
			Graphics2D g2d = to.createGraphics();
			to = g2d.getDeviceConfiguration().createCompatibleImage(newWidth, newHeight,
					Transparency.TRANSLUCENT);
			g2d.dispose();
			g2d = to.createGraphics();
			@SuppressWarnings("static-access")
			Image from = bi2.getScaledInstance(newWidth, newHeight, bi2.SCALE_AREA_AVERAGING);
			g2d.drawImage(from, 0, 0, null);
			g2d.dispose();
			ImageIO.write(to, "png", toFile);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 測試
	 */
	public static void main(String[] args) throws Exception {
		File fromFile = new File("c:/wxcking/pic/D77E37CB.png");
		File toFile = new File("c:/wxcking/pic/D77E37CB_thumb.png");
		resizePng(fromFile, toFile, 100, 100, false);
	}
}



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