nidapeng
2024-03-17 a7416d5b0872aa77000fea588ec203438637dc3d
整理
已添加1个文件
已修改1个文件
183 ■■■■■ 文件已修改
server/dmvisit_service/src/main/java/com/doumee/core/utils/FaceImageCompress.java 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_web/src/main/java/com/doumee/api/web/PublicController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
        }
    }
}
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),