fusenapi/utils/image/image_size.go
2023-08-24 18:28:01 +08:00

67 lines
1.7 KiB
Go

package image
import (
"fmt"
"fusenapi/constants"
"strings"
"time"
)
// 定义尺寸规则
var sizeArray = []uint32{1200, 1000, 750, 500, 128}
// 裁剪尺寸阶梯
var newSizeArray = []uint32{200, 400, 600, 800}
// 获取合适尺寸
func GetCurrentSize(clientSize uint32) uint32 {
lenNewSize := len(newSizeArray)
//大于最大尺寸则返回规则最大尺寸
if clientSize >= newSizeArray[lenNewSize-1] {
return newSizeArray[lenNewSize-1]
}
//小于最小尺寸则返回规则最小尺寸
if clientSize <= newSizeArray[0] {
return newSizeArray[0]
}
for _, v := range newSizeArray {
if v >= clientSize {
return v
}
}
return clientSize
}
// 千人前面图像拼接
type ThousandFaceImageFormatReq struct {
Size int
IsThousandFace int
Cover string
CoverImg string
CoverDefault string
ProductId int64
UserId int64
}
func ThousandFaceImageFormat(req *ThousandFaceImageFormatReq) {
if req.Size <= 0 {
return
}
coverSlice := strings.Split(req.Cover, ".")
coverImgSlice := strings.Split(req.CoverImg, ".")
if req.Size >= 200 && len(coverSlice) >= 2 && len(coverImgSlice) >= 2 {
req.Cover = fmt.Sprintf("%s_%d.%s", coverSlice[0], req.Size, coverSlice[1])
req.CoverImg = fmt.Sprintf("%s_%d.%s", coverImgSlice[0], req.Size, coverImgSlice[1])
}
if req.IsThousandFace == 0 {
return
}
//千人千面处理
req.Cover = ""
req.CoverDefault = req.CoverImg
if req.Size >= 200 && len(coverSlice) >= 2 && len(coverImgSlice) >= 2 {
req.CoverImg = fmt.Sprintf("%s/test/%d/%d_%d.png?%d", constants.DOMAIN_RENDER_IMG_NAME, req.UserId, req.UserId, req.ProductId, time.Now().UTC().Unix())
req.CoverDefault = fmt.Sprintf("%s_%d.%s", coverImgSlice[0], req.Size, coverImgSlice[1])
}
}