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