From e567c76939c6516b4146aa6a554d95c0bcb4f078 Mon Sep 17 00:00:00 2001
From: rain <167982779@qq.com>
Date: Mon, 15 Jul 2024 16:57:50 +0800
Subject: [PATCH] 修改航线文件重命名报错,增加图片缩略图,完善喊话功能

---
 src/main/java/com/dji/sample/territory/utils/ImgZipUtil.java |   55 +++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 35 insertions(+), 20 deletions(-)

diff --git a/src/main/java/com/dji/sample/territory/utils/ImgZipUtil.java b/src/main/java/com/dji/sample/territory/utils/ImgZipUtil.java
index 39a842b..365d195 100644
--- a/src/main/java/com/dji/sample/territory/utils/ImgZipUtil.java
+++ b/src/main/java/com/dji/sample/territory/utils/ImgZipUtil.java
@@ -5,6 +5,7 @@
 import javax.imageio.ImageWriter;
 import javax.imageio.stream.ImageOutputStream;
 import javax.imageio.stream.MemoryCacheImageOutputStream;
+import java.awt.*;
 import java.awt.image.BufferedImage;
 import java.io.*;
 import java.nio.file.Files;
@@ -14,29 +15,43 @@
     /**
      * 图片压缩
      *
-     * @param originalImageFile
-     * @param compressionQuality 图片压缩质量 0-1
      * @return
      * @throws IOException
      */
-    public static File compressImageAndGetFile(File originalImageFile, float compressionQuality) throws IOException {
-        BufferedImage originalImage = ImageIO.read(originalImageFile);
-        try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
-            ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next();
-            try (ImageOutputStream ios = new MemoryCacheImageOutputStream(baos)) {
-                writer.setOutput(ios);
-                ImageWriteParam param = writer.getDefaultWriteParam();
-                param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
-                param.setCompressionQuality(compressionQuality);
-                writer.write(null, new javax.imageio.IIOImage(originalImage, null, null), param);
-            } finally {
-                writer.dispose();
-            }
-            InputStream in = new ByteArrayInputStream(baos.toByteArray());
-            File tempFile = File.createTempFile("compressed-", ".jpg");
-            tempFile.deleteOnExit();
-            Files.copy(in, tempFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
-            return tempFile;
+    public static File compressImage(File inputFile, int targetSizeKB) throws IOException {
+        BufferedImage image = ImageIO.read(inputFile);
+
+        // 计算目标图片的尺寸
+        long targetSizeBytes = targetSizeKB * 1024;
+        long originalSizeBytes = getImageSize(image);
+        double compressionRatio = (double) targetSizeBytes / originalSizeBytes;
+        int targetWidth = (int) (image.getWidth() * Math.sqrt(compressionRatio));
+        int targetHeight = (int) (image.getHeight() * Math.sqrt(compressionRatio));
+
+        // 使用ImageIO进行压缩
+        BufferedImage compressedImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);
+        Graphics2D graphics = compressedImage.createGraphics();
+        graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+        graphics.drawImage(image, 0, 0, targetWidth, targetHeight, null);
+        graphics.dispose();
+
+        // 将压缩后的图片写入输出文件
+        File outputFile = new File(inputFile.getParent(), "compressed_" + inputFile.getName());
+        ImageIO.write(compressedImage, "jpeg", outputFile);
+        return outputFile;
+    }
+
+    public static long getImageSize(BufferedImage image) {
+        File tempFile;
+        try {
+            tempFile = File.createTempFile("temp", ".tmp");
+            ImageIO.write(image, "jpg", tempFile);
+            long size = tempFile.length();
+            tempFile.delete();
+            return size;
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            return 0;
         }
     }
 }

--
Gitblit v1.9.3