import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import javax.imageio.ImageIO; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class Snippet { /** * 創建圖片縮略圖(等比縮放) * * @param src * 源圖片文件完整路徑 * @param dist * 目標圖片文件完整路徑 * @param width * 縮放的寬度 * @param height * 縮放的高度 */ public static void createThumbnail(String src, String dist, float width, float height) { try { File srcfile = new File(src); if (!srcfile.exists()) { System.out.println("文件不存在"); return; } BufferedImage image = ImageIO.read(srcfile); // 獲得縮放的比例 double ratio = 1.0; // 判斷如果高、寬都不大於設定值,則不處理 if (image.getHeight() > height || image.getWidth() > width) { if (image.getHeight() > image.getWidth()) { ratio = height / image.getHeight(); } else { ratio = width / image.getWidth(); } } // 計算新的圖面寬度和高度 int newWidth = (int) (image.getWidth() * ratio); int newHeight = (int) (image.getHeight() * ratio); BufferedImage bfImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB); bfImage.getGraphics().drawImage( image.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null); FileOutputStream os = new FileOutputStream(dist); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os); encoder.encode(bfImage); os.close(); System.out.println("創建縮略圖成功"); } catch (Exception e) { System.out.println("創建縮略圖發生異常" + e.getMessage()); } } public static void main(String[] args) { createThumbnail("E:\\test_1920x1200.jpg", "D:\\a.png", 100, 100); createThumbnail("E:\\test_1920x1200.jpg", "D:\\b.png", 2000, 2000); createThumbnail("E:\\test_1920x1200.jpg", "D:\\c.jpg", 800, 600); } }