java等比壓縮圖片工具類
阿新 • • 發佈:2022-03-14
工具類
package com.chinaums.abp.util; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; /** * 圖片處理工具類 * JeWang */ public class UtilImg { /** * * @param src 要刪除的檔案 * @param dist 要修改名稱的檔案 * @param newname 要修改為的名稱,不加字尾 * @return */ public static boolean delelteAndRenameFile(String src, String dist, String newname) { File srcfile = new File(src); if (!srcfile.exists()) { System.out.println("檔案不存在"); return false; } File distfile = new File(dist); if (!distfile.exists()) { System.out.println("檔案不存在"); return false; } srcfile.delete(); distfile.renameTo(srcfile); return true; } /** * 建立圖片縮圖(等比縮放) * @param src 源圖片檔案完整路徑 * @param dist 目標圖片檔案完整路徑 * @param width 高度 * @param height 寬度 */ public static boolean createThumbnail(String src, String dist, float width, float height) { try { File srcfile = new File(src); if (!srcfile.exists()) { System.out.println("檔案不存在"); return false; } 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); ImageIO.write(bfImage, "jpg", os); os.close(); System.out.println("建立縮圖成功"); return true; } catch (Exception e) { System.out.println("建立縮圖發生異常" + e.getMessage()); return false; } } }
使用
if(UtilImg.createThumbnail(filePath,filePathTmp, Float.parseFloat(image_width),Float.parseFloat(image_height))){
UtilImg.delelteAndRenameFile(filePath,filePathTmp,uuidStr);
}