使用者上傳高解析度照片 (如 300 萬畫素 ~600KB+),直接顯示頻寬負擔大。伺服端自動產生縮圖可大幅改善體驗。
ImageIO)。import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class JpgResizer {
public void resizeHalf(File srcFile, File destFile) throws Exception {
// 1. 讀取原圖
Image src = ImageIO.read(srcFile);
int w = src.getWidth(null);
int h = src.getHeight(null);
// 2. 建立目標 BufferedImage
BufferedImage tag = new BufferedImage(w/2, h/2, BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src, 0, 0, w/2, h/2, null);
// 3. JPEG 編碼輸出
try (FileOutputStream out = new FileOutputStream(destFile)) {
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag);
}
}
}
FileChannel.map() 避免全量載入。com.sun.image.codec.jpeg 為 Sun 專有 API,跨 JDK 版本可能不穩,生產環境建議改用 ImageIO.write(img, "jpg", out) 或 TwelveMonkeys ImageIO 外掛。同樣原理可實現:旋轉、裁切、水印、格式轉換、品質壓縮等。若需企業級影像處理管線,建議評估 JMagick、TwelveMonkeys ImageIO、Apache Sanselan 等庫。