Files
bifrost/core/providers/utils/images.go
Beyhan Oğur 880f412e2c first commit
2026-04-26 21:52:23 +03:00

51 lines
1.3 KiB
Go

package utils
import (
"strconv"
"strings"
)
// ConvertSizeToAspectRatioAndResolution converts a standard size string (e.g., "1024x1024")
// to an aspect ratio and image size tier.
// aspectRatio is one of "1:1", "3:4", "4:3", "9:16", "16:9" (empty if unrecognised).
// imageSize is one of "1K", "2K", "4K" (empty if out of range).
func ConvertSizeToAspectRatioAndResolution(size string) (aspectRatio, imageSize string) {
parts := strings.Split(size, "x")
if len(parts) != 2 {
return "", ""
}
width, err1 := strconv.Atoi(parts[0])
height, err2 := strconv.Atoi(parts[1])
if err1 != nil || err2 != nil {
return "", ""
}
if width <= 0 || height <= 0 {
return "", ""
}
if width <= 1024 && height <= 1024 {
imageSize = "1K"
} else if width <= 2048 && height <= 2048 {
imageSize = "2K"
} else if width <= 4096 && height <= 4096 {
imageSize = "4K"
}
ratio := float64(width) / float64(height)
if ratio >= 0.99 && ratio <= 1.01 {
aspectRatio = "1:1"
} else if ratio >= 0.74 && ratio <= 0.76 {
aspectRatio = "3:4"
} else if ratio >= 1.32 && ratio <= 1.34 {
aspectRatio = "4:3"
} else if ratio >= 0.56 && ratio <= 0.57 {
aspectRatio = "9:16"
} else if ratio >= 1.77 && ratio <= 1.78 {
aspectRatio = "16:9"
}
return aspectRatio, imageSize
}