From 4f8e447bdda217dc6144661b33af72199fa86b85 Mon Sep 17 00:00:00 2001
From: Grand-cocoa
<1075576561@qq.com49111108+grand-cocoa@users.noreply.github.com>
Date: Wed, 11 Dec 2024 15:52:03 +0800
Subject: [PATCH] =?UTF-8?q?feat(randomphoto):=20=E4=BC=98=E5=8C=96?=
=?UTF-8?q?=E5=9B=BE=E7=89=87=E4=B8=8B=E8=BD=BD=E5=92=8C=E5=8E=8B=E7=BC=A9?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 新增 ImageUtil 类,提供图片下载和压缩工具方法
- 重构 RandomPhotoService 类,使用新的 ImageUtil工具类处理图片
- 添加 thumbnailator 依赖,用于图片压缩处理
---
pom.xml | 6 +++
.../service/randomphoto/RandomPhotoService.kt | 9 ++--
.../alinadace/sakuramiki/util/ImageUtil.kt | 47 +++++++++++++++++++
3 files changed, 57 insertions(+), 5 deletions(-)
create mode 100644 src/main/kotlin/info/alinadace/sakuramiki/util/ImageUtil.kt
diff --git a/pom.xml b/pom.xml
index db7dccc..5e73379 100644
--- a/pom.xml
+++ b/pom.xml
@@ -142,6 +142,12 @@
com.squareup.okhttp3
okhttp
+
+
+ net.coobird
+ thumbnailator
+ 0.4.20
+
diff --git a/src/main/kotlin/info/alinadace/sakuramiki/service/randomphoto/RandomPhotoService.kt b/src/main/kotlin/info/alinadace/sakuramiki/service/randomphoto/RandomPhotoService.kt
index a1932c3..3d1030e 100644
--- a/src/main/kotlin/info/alinadace/sakuramiki/service/randomphoto/RandomPhotoService.kt
+++ b/src/main/kotlin/info/alinadace/sakuramiki/service/randomphoto/RandomPhotoService.kt
@@ -5,14 +5,13 @@ import info.alinadace.sakuramiki.annotation.BotFunction
import info.alinadace.sakuramiki.service.Service
import info.alinadace.sakuramiki.service.randomphoto.domain.FileList
import info.alinadace.sakuramiki.service.randomphoto.domain.SingleFile
-import info.alinadace.sakuramiki.util.okHttpClient
+import info.alinadace.sakuramiki.util.ImageUtil
import io.github.kloping.qqbot.api.v2.FriendMessageEvent
import io.github.kloping.qqbot.api.v2.GroupMessageEvent
import io.github.kloping.qqbot.api.v2.MessageV2Event
import io.github.kloping.qqbot.entities.ex.Image
import io.github.kloping.qqbot.entities.ex.PlainText
import jakarta.annotation.Resource
-import okhttp3.Request
/**
* @author Kane
@@ -57,13 +56,13 @@ class RandomPhotoService : Service {
return
}
event.send("图片下载中...")
- val request = Request.Builder().get().url(file.data.rawURL).build()
- val imageByte = okHttpClient.newCall(request).execute().body?.bytes();
+ val imageByte = ImageUtil.download(file.data.rawURL)
if (imageByte == null) {
event.send("图片下载失败")
return
}
- val image = Image(imageByte)
+ val compression = ImageUtil.compression(imageByte)
+ val image = Image(compression)
event.send(image)
}
}
diff --git a/src/main/kotlin/info/alinadace/sakuramiki/util/ImageUtil.kt b/src/main/kotlin/info/alinadace/sakuramiki/util/ImageUtil.kt
new file mode 100644
index 0000000..f7952db
--- /dev/null
+++ b/src/main/kotlin/info/alinadace/sakuramiki/util/ImageUtil.kt
@@ -0,0 +1,47 @@
+package info.alinadace.sakuramiki.util
+
+import net.coobird.thumbnailator.Thumbnails
+import okhttp3.Request
+import java.io.ByteArrayInputStream
+import java.io.ByteArrayOutputStream
+
+/**
+ * @author Kane
+ * @since 2024/11/13 11:39
+ */
+class ImageUtil {
+ companion object {
+ private const val MAX_SIZE = 1024 * 1024
+ fun compression(bytes: ByteArray): ByteArray {
+ val size = bytes.size
+ var ratio = if (size > MAX_SIZE) {
+ MAX_SIZE.toFloat() / size
+ } else {
+ return bytes
+ }
+ if (ratio > 0.11f) {
+ ratio -= 0.1f
+ }
+ val inputStream = ByteArrayInputStream(bytes)
+ val outputStream = ByteArrayOutputStream()
+
+ try {
+ Thumbnails.of(inputStream)
+ .width(1920)
+ .height(1080)
+ .scale(1.0)
+ .outputQuality(ratio) // 设置压缩质量,范围从 0.0 到 1.0
+ .toOutputStream(outputStream)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+
+ return outputStream.toByteArray()
+ }
+
+ fun download(url: String): ByteArray? {
+ val request = Request.Builder().get().url(url).build()
+ return okHttpClient.newCall(request).execute().body?.bytes();
+ }
+ }
+}