package com.flightfeather.uav.common.utils
|
|
import java.awt.Image
|
import java.awt.image.BufferedImage
|
import java.io.ByteArrayInputStream
|
import java.io.ByteArrayOutputStream
|
import java.util.*
|
import javax.imageio.ImageIO
|
|
/**
|
* 图片处理工具
|
* @date 2024/5/31
|
* @author feiyu02
|
*/
|
object ImageUtil {
|
private const val SCHEME_PNG = "data:image/{format};base64,"
|
|
fun prefix(formatName: String): String {
|
return SCHEME_PNG.replace("{format}", formatName)
|
}
|
|
/**
|
* 按照固定宽度压缩图片至base64形式
|
* @param bytes 图片二进制流
|
* @param w 转换后图片宽度
|
* @param formatName 图片格式
|
* @param needPrefix 是否添加前缀
|
*/
|
fun compressImage2(bytes: ByteArray, w: Int, formatName: String = "png", needPrefix: Boolean = true): String {
|
val input = ByteArrayInputStream(bytes)
|
val srcImg = ImageIO.read(input)
|
val srcW = srcImg.width
|
val scale = w.toFloat() / srcW
|
val h = (srcImg.height * scale).toInt()
|
|
val buffImg = BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB)
|
buffImg.graphics.drawImage(srcImg.getScaledInstance(w, h, Image.SCALE_SMOOTH), 0, 0, null)
|
val out = ByteArrayOutputStream()
|
ImageIO.write(buffImg, formatName, out)
|
|
return if (needPrefix) {
|
prefix(formatName) + Base64.getEncoder().encodeToString(out.toByteArray())
|
} else {
|
Base64.getEncoder().encodeToString(out.toByteArray())
|
}
|
}
|
}
|