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