From a7416d5b0872aa77000fea588ec203438637dc3d Mon Sep 17 00:00:00 2001
From: nidapeng <jp@doumee.com>
Date: 星期日, 17 三月 2024 17:10:12 +0800
Subject: [PATCH] 整理

---
 server/dmvisit_service/src/main/java/com/doumee/core/utils/FaceImageCompress.java |  173 +++++++++++++++++++++++++++++++++++++++++++
 server/dmvisit_web/src/main/java/com/doumee/api/web/PublicController.java         |   10 ++
 2 files changed, 183 insertions(+), 0 deletions(-)

diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/utils/FaceImageCompress.java b/server/dmvisit_service/src/main/java/com/doumee/core/utils/FaceImageCompress.java
new file mode 100644
index 0000000..35aa88a
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/utils/FaceImageCompress.java
@@ -0,0 +1,173 @@
+package com.doumee.core.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.utils.aliyun.ALiYunUtil;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.multipart.commons.CommonsMultipartResolver;
+
+import javax.imageio.IIOImage;
+import javax.imageio.ImageIO;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.ImageWriter;
+import javax.imageio.stream.ImageOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.UUID;
+
+
+public class FaceImageCompress {
+
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
+    public static void main(String[] args) {
+        compressAllFiles(new File("/usr/local/ftp/member/20240317"),800);
+//        compressAllFiles(new File("D://visit"));
+    }
+    public static void compressAllFiles(File folder ,int w) {
+        File[] files = folder.listFiles();
+        for (File file : files) {
+            if (file.isDirectory()) {
+//                getAllFiles(file);
+            } else {
+                compressImg(file,w);
+                System.out.println(file.getAbsolutePath());
+            }
+        }
+    }
+
+    public static void compressImageNew(File input, long targetSize) {
+        try {
+            BufferedImage image = ImageIO.read(input);
+
+            // 浣跨敤IIOImage灏佽BufferedImage
+            IIOImage iioImage = new IIOImage(image, null, null);
+
+            // 鑾峰彇鎵�鏈夊彲鐢ㄧ殑ImageWriter
+            Iterator<ImageWriter> imageWriters = ImageIO.getImageWritersByFormatName("jpeg");
+            if (!imageWriters.hasNext()) {
+                throw new IOException("No JPEG image writers found");
+            }
+            String name = input.getAbsolutePath();
+            copyToNewfile(input);
+            input.delete();
+            ImageWriter imageWriter = imageWriters.next();
+            File output = new File(name);
+            // 璁剧疆鍘嬬缉鍙傛暟
+
+            ImageWriteParam imageWriteParam = imageWriter.getDefaultWriteParam();
+            imageWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
+            imageWriteParam.setCompressionQuality(1f); // 鍒濆璐ㄩ噺涓烘渶楂�
+
+            // 鍐欏叆鏂囦欢鍓嶈绠楃洰鏍囨枃浠跺ぇ灏�
+            long fileSize = 0;
+            do {
+                // 娓呯┖鍐欏叆鍣ㄤ互渚块噸鐢�
+                imageWriter.reset();
+
+                // 璁剧疆鏂扮殑鍘嬬缉璐ㄩ噺
+                float quality = imageWriteParam.getCompressionQuality();
+                imageWriteParam.setCompressionQuality(quality - (quality * 2) / 100); // 闄嶄綆璐ㄩ噺
+
+                // 鍐欏叆鏂囦欢
+                imageWriter.setOutput(ImageIO.createImageOutputStream(output));
+                imageWriter.write(null, iioImage, imageWriteParam);
+
+                // 鏇存柊鏂囦欢澶у皬
+                fileSize = output.length();
+
+                // 妫�鏌ユ枃浠跺ぇ灏忔槸鍚︽弧瓒宠姹�
+            } while (fileSize > targetSize && imageWriteParam.getCompressionQuality() > 0);
+
+            imageWriter.dispose();
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+    public static  void compressImg(File file, int w) {
+        try {
+            if(w <500){
+                return;
+            }
+
+            long originalFileSize = file.length();
+            BufferedImage originalImage = ImageIO.read(file);
+            double compressionRatio =  (double) originalFileSize / (200 * 1024.0);
+            if (compressionRatio > 1 && originalImage.getWidth()>w) {
+                System.out.println("==========================="+compressionRatio);
+//                int compressedWidth = (int) (originalImage.getWidth() / compressionRatio);
+//                int compressedHeight = (int) (originalImage.getHeight() / compressionRatio);
+                int compressedWidth = w;
+                double tt =(double)w / (double)originalImage.getWidth();
+                int compressedHeight = (int) (originalImage.getHeight() * tt);
+                BufferedImage compressedImage = new BufferedImage(compressedWidth, compressedHeight, BufferedImage.TYPE_INT_RGB);
+                Graphics2D graphics = compressedImage.createGraphics();
+                graphics.drawImage(originalImage, 0, 0, compressedWidth, compressedHeight, null);
+//                ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+//                ImageOutputStream imOut = ImageIO.createImageOutputStream(byteArrayOutputStream);
+//                ImageIO.write(compressedImage, "jpg", imOut);
+//                InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
+                graphics.dispose();
+                String oldFile=    copyToNewfile(file);
+                String name = file.getAbsolutePath();
+                file.delete();
+                File outputfile= new File(name);
+                ImageIO.write(compressedImage, "jpg", outputfile);
+                if(outputfile.length()<50 * 1024.0){
+                    resetOldfile(oldFile);
+                }
+            } else {
+                //涓嶅鐞�
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static String copyToNewfile(File file ){
+        try {
+            String oldFile = file.getAbsolutePath();
+            String newFile = oldFile.replace(file.getName(),"copy/"+file.getName());
+            Path sourcePath = Paths.get(oldFile);
+            Path destinationPath = Paths.get( newFile);
+            Files.copy(sourcePath, destinationPath, StandardCopyOption.REPLACE_EXISTING);
+            return  newFile;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+    public static void resetOldfile(String oldFile ){
+        try {
+            String newFile= oldFile.replace( "copy/","");
+            Path sourcePath  = Paths.get(oldFile);
+            Path destinationPath = Paths.get( newFile);
+            Files.copy(sourcePath, destinationPath, StandardCopyOption.REPLACE_EXISTING);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/server/dmvisit_web/src/main/java/com/doumee/api/web/PublicController.java b/server/dmvisit_web/src/main/java/com/doumee/api/web/PublicController.java
index 1e3743d..5562a5b 100644
--- a/server/dmvisit_web/src/main/java/com/doumee/api/web/PublicController.java
+++ b/server/dmvisit_web/src/main/java/com/doumee/api/web/PublicController.java
@@ -6,6 +6,7 @@
 import com.doumee.core.annotation.trace.Trace;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.FaceImageCompress;
 import com.doumee.core.utils.FtpUtil;
 import com.doumee.core.utils.aliyun.ALiYunUtil;
 import io.swagger.annotations.Api;
@@ -45,6 +46,15 @@
     private SystemDictDataBiz systemDictDataBiz;
 
 
+    @ApiOperation(value = "鍘嬬缉鍥剧墖", notes = "鍘嬬缉鍥剧墖", httpMethod = "POST", position = 6)
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "folder", value = "鏂囦欢澶�", required = true, paramType = "query", dataType = "String", dataTypeClass = String.class),
+    })
+    @GetMapping(value = "/compressImg")
+    public void compressImg(@RequestParam(name = "folder") String folder, @RequestParam(name = "width") int width, HttpServletRequest request, HttpServletResponse response) throws Exception {
+       FaceImageCompress. compressAllFiles(new File(folder),width);
+    }
+
     @ApiOperation(value = "涓婁紶", notes = "涓婁紶", httpMethod = "POST", position = 6)
     @ApiImplicitParams({
         @ApiImplicitParam(name = "folder", value = "鏂囦欢澶�", required = true, paramType = "query", dataType = "String", dataTypeClass = String.class),

--
Gitblit v1.9.3