ImageUtils 是一個功能豐富的 Java 圖像處理工具類,採用單例模式,提供縮放、切割、旋轉、翻轉、水印(文字/圖片)、灰度化、格式轉換、切片等核心功能,基於 java.awt 和 javax.imageio 實現。
| 功能類別 | 代表方法 | 說明 |
|---|---|---|
| 縮放 | scaleToFile, scaleByPercentage, scaleByPixelRate, scaleByPixel | 支持按文件、百分比、最大寬高比例、固定尺寸縮放,啟用抗鋸齒與高質量渲染 |
| 切割 | cut (多重載) | 支持指定座標/寬高切割、九宮格定位切割,可選填充白邊 |
| 旋轉/翻轉 | rotateImage, flipHorizontalImage, flipVerticalImage | 任意角度旋轉、水平/垂直鏡像翻轉 |
| 水印 | waterMark, textMark, pressText, pressImage | 圖片水印、文字水印,支持透明度、字體、顏色、位置自定義 |
| 色彩轉換 | toGray | 彩色轉灰度,支持 BufferedImage 與文件級操作 |
| 格式轉換 | convert | 支持 GIF/JPG/PNG/BMP 互轉 |
| 切片 | cut (rows/cols) | 將圖像按行列切分為多塊小圖 |
所有縮放方法均啟用 RenderingHints.KEY_INTERPOLATION 和 VALUE_RENDER_QUALITY,並使用 Graphics2D.drawImage 繪製,而非直接用 Image.getScaledInstance,確保輸出質量。
水印功能通過 AlphaComposite.SRC_ATOP 實現疊加,alpha 參數控制 0.1f~1.0f 透明度。
private static ImageUtils instance;
private ImageUtils() { instance = this; }
public static ImageUtils getInstance() {
if (instance == null) instance = new ImageUtils();
return instance;
}
如 pressText、pressImage、toGray(String, String, String) 直接接受文件路徑,內部處理讀寫流,適合快速集成。
// 文字水印
ImageUtils.getInstance().pressText(
"版權所有", "src.jpg", "dest.jpg",
"微軟雅黑", Font.BOLD, Color.RED, 30, 0, 0, 0.5f, "jpg"
);
// 圖片縮放並轉格式
ImageUtils.getInstance().scaleToFile("src.png", "thumb.jpg", 200, 200, "jpg");
Graphics2D 對象使用後需調用 dispose() 釋放資源。CropImageFilter,現代項目可考慮改用 BufferedImage.getSubimage。ImageUtils 封裝了企業級開發中最常見的圖像處理需求,代碼結構清晰,可直接納入項目或作為二次開發基礎。