51 lines
1.3 KiB
Go
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
|
|
}
|