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();
+ }
+ }
+}