首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 圖片縮放與格式轉換工具類:ImageUtils 完整實現

     編輯:Java 相關知識

功能概覽

ImageUtils 提供靜態方法實現:

  • 指定寬高縮放並轉換格式(支援 InputStream/File/Path 輸入輸出)
  • 等比縮放(保持長寬比,自動計算目標尺寸)
  • 純格式轉換(不改變尺寸)

核心採用 BufferedImage.getScaledInstance() 重繪,輸出 TYPE_INT_RGB 格式。

核心方法解析

私有核心轉換方法

private static BufferedImage convert(int width, int height, BufferedImage input) {
    BufferedImage output = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    Image scaled = input.getScaledInstance(output.getWidth(), output.getHeight(), output.getType());
    output.createGraphics().drawImage(scaled, null, null);
    return output;
}

建立目標畫布,將原圖縮放繪製上去,返回新 BufferedImage。

公開重載方法

方法簽名用途
convert(w, h, InputStream, OutputStream, format)流式處理,指定輸出格式
convert(File, File)檔案間轉換,自動從副檔名推斷格式
convert(w, h, File, File)指定尺寸的檔案轉換
convert(w, h, String, String)路徑字串版本
equimultipleConvert(...)等比縮放,自動計算適配尺寸

等比縮放邏輯

if (srcW / srcH >= targetW / targetH) {
    // 以寬度為基準
    if (srcW > targetW) {
        targetH = srcH * targetW / srcW;
    } else { targetW = srcW; targetH = srcH; }
} else {
    // 以高度為基準
    if (srcH > targetH) {
        targetW = srcW * targetH / srcH;
    } else { targetW = srcW; targetH = srcH; }
}

確保縮放後不超出目標矩形,且保持原始比例。

單元測試範例

@Test
public void test() throws Exception {
    System.out.println(ImageUtils.convert(1650, 1024, "c:\\1.png", "c:\\1.png.jpg"));
    System.out.println(ImageUtils.convert(400, 300, "c:\\1.jpg", "c:\\1.jpg.png"));
    System.out.println(ImageUtils.equimultipleConvert(1600, 1400, new File("c:\\1.bmp"), new File("c:\\1Equimultiple.jpeg")));
}

測試涵蓋 PNG→JPG、JPG→PNG、BMP→GIF 等格式互轉,及等比縮放驗證。

注意事項

  • getScaledInstance() 預設使用平滑縮放,品質較好但速度一般;大批量處理可考慮 Graphics2D 配合 RenderingHints。
  • 輸出固定為 TYPE_INT_RGB,不保留 Alpha 通道;若需透明背景請改用 TYPE_INT_ARGB。
  • 未處理 EXIF 方向標籤,照片可能需預先旋轉修正。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved