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:/a.png");
File toFile = new File("c:/b.png");
resizePng(fromFile, toFile, 31, 32, false);
}
}
轉載:https://gitee.com/northstar888/codes/u638g2kszn147wvipdlhx76