瀏覽代碼

图片压缩修改

wangzhuo 1 年之前
父節點
當前提交
dd815a92fb
共有 1 個文件被更改,包括 37 次插入26 次删除
  1. 37 26
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/wx/AttachmngsController.java

+ 37 - 26
ruoyi-admin/src/main/java/com/ruoyi/web/controller/wx/AttachmngsController.java

@@ -13,9 +13,13 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
+
+import javax.imageio.ImageIO;
 import javax.servlet.http.HttpServletRequest;
 import java.awt.*;
+import java.awt.image.BufferedImage;
 import java.io.*;
+import java.math.BigDecimal;
 
 @RestController
 @RequestMapping("/attachmngs")
@@ -51,43 +55,32 @@ public class AttachmngsController {
         System.out.println(date);
 
         // 水印
-//         String watermark = longitude + "," + latitude + "-" + date;
-
         String address = mapUtils.pointsToLocationsAll(longitude + "," + latitude);
-
-        SysUser user = SecurityUtils.getLoginUser().getUser();
-//        String watermark = longitude + "," + latitude + "-" + date + "-" + user.getNickName();
         String watermark = address + "||" + date + "||" + carRegNo;
-        System.out.println( );
-//        String watermark = date;
         File file2 = AddWatermarkUtil.transferToFile(file);
-        // addWaterMark(file2, file2, watermark);
-
-
-        // 如果图片大于一兆压缩
-//        if (AddWatermarkUtil.fileToTransfer(file2).getBytes().length > 240800) {
-//            // 压缩
-            Thumbnails.of(file2)
-                    .scale(0.5f) //图片大小(长宽)压缩比例 从0-1,1表示原图
-                    .outputQuality(0.5f) //图片质量压缩比例 从0-1,越接近1质量越好
-                    .toFile(file2);
-//        }
-
 
+        System.out.println("水印前大小:" + file2.length() / 1024);
          AddWatermarkUtil.waterPress(file2, file2, Color.DARK_GRAY, 48, watermark);
 //        AddWatermarkUtil.addWaterMark(file2, file2, Color.DARK_GRAY, 48, watermark);
 
-
-//        if (AddWatermarkUtil.fileToTransfer(file2).getBytes().length > 1048576) {
+//        MultipartFile multipartFile = AddWatermarkUtil.fileToTransfer(file2);
+        System.out.println("压缩前大小:" + file2.length() / 1024);
+//        ByteArrayOutputStream f = new ByteArrayOutputStream();
+        String fileName = file2.getName();
+//        if (file2.length() > 50 * 1024) {
             // 压缩
-            Thumbnails.of(file2)
-                    .scale(0.5f) //图片大小(长宽)压缩比例 从0-1,1表示原图
-                    .outputQuality(0.5f) //图片质量压缩比例 从0-1,越接近1质量越好
-                    .toFile(file2);
+        Thumbnails.of(file2)
+                    .scale(0.6f) //图片大小(长宽)压缩比例 从0-1,1表示原图
+                    .toFile("/usr/local/project/DaoHe/imgFiles/" + fileName + ".jpg");
+            File file1 = new File("/usr/local/project/DaoHe/imgFiles/" + fileName + ".jpg");
+            System.out.println("压缩中大小:" + file1.length() / 1024);
 //        }
+//        compressPicCycle(file2, 50L, 0.5);
+        System.out.println("压缩完成大小:" + file1.length() / 1024);
 
         // 转二进制
-        byte[] bytes = AddWatermarkUtil.fileToTransfer(file2).getBytes();
+        byte[] bytes = AddWatermarkUtil.fileToTransfer(file1).getBytes();
+//        byte[] bytes = f.toByteArray();
 
         // 存储到数据库
         AttachMngs attachMngs = new AttachMngs();
@@ -109,6 +102,24 @@ public class AttachmngsController {
         return AjaxResult.success("操作成功", "https://yd.echepei.com/prod-api/attachmngs/img/" + attachId);
     }
 
+    private static void compressPicCycle(File desPath, long desFileSize, double accuracy) throws IOException {
+        File srcFileJPG = desPath;
+        long srcFileSizeJPG = srcFileJPG.length();
+        //2.判断大小,如果小于50kb,不用压缩,如果大于等于50kb,需要压缩
+        if (srcFileSizeJPG <= desFileSize * 1024) {
+            return;
+        }
+        //计算宽高
+        BufferedImage bim = ImageIO.read(srcFileJPG);
+        int srcWidth = bim.getWidth();
+        int srcHeight = bim.getHeight();
+        int destWidth = new BigDecimal(srcWidth).multiply(new BigDecimal(accuracy)).intValue();
+        int destHeight = new BigDecimal(srcHeight).multiply(new BigDecimal(accuracy)).intValue();
+        Thumbnails.of(desPath).size(destWidth,destHeight).outputQuality(accuracy).toFile(desPath);
+        compressPicCycle(desPath,desFileSize,accuracy);
+        System.out.println("压缩中大小:" + desPath.length() / 1024);
+    }
+
     /**
      * 获取图片
      *