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