status-go/images/meta.go

72 lines
1.9 KiB
Go

package images
const (
UNKNOWN ImageType = 1 + iota
// Raster image types
JPEG
PNG
GIF
WEBP
)
const (
MaxJpegQuality = 80
MinJpegQuality = 50
SmallDim = ResizeDimension(80)
LargeDim = ResizeDimension(240)
BannerDim = ResizeDimension(800)
SmallDimName = "thumbnail"
LargeDimName = "large"
BannerIdentityName = "banner"
)
var (
// ResizeDimensions list of all available image resize sizes
ResizeDimensions = []ResizeDimension{SmallDim, LargeDim}
// DimensionSizeLimit the size limits imposed on each resize dimension
// Figures are based on the following sample data https://github.com/status-im/status-mobile/issues/11047#issuecomment-694970473
DimensionSizeLimit = map[ResizeDimension]DimensionLimits{
SmallDim: {
Ideal: 2560, // Base on the largest sample image at quality 60% (2,554 bytes ∴ 1024 * 2.5)
Max: 5632, // Base on the largest sample image at quality 80% + 50% margin (3,683 bytes * 1.5 ≈ 5500 ∴ 1024 * 5.5)
},
LargeDim: {
Ideal: 16384, // Base on the largest sample image at quality 60% (16,143 bytes ∴ 1024 * 16)
Max: 38400, // Base on the largest sample image at quality 80% + 50% margin (24,290 bytes * 1.5 ≈ 37500 ∴ 1024 * 37.5)
},
}
// ResizeDimensionToName maps a ResizeDimension to its assigned string name
ResizeDimensionToName = map[ResizeDimension]string{
SmallDim: SmallDimName,
LargeDim: LargeDimName,
}
// NameToResizeDimension maps a string name to its assigned ResizeDimension
NameToResizeDimension = map[string]ResizeDimension{
SmallDimName: SmallDim,
LargeDimName: LargeDim,
}
)
type DimensionLimits struct {
Ideal int
Max int
}
type ImageType uint
type ResizeDimension uint
func GetBannerDimensionLimits() DimensionLimits {
return DimensionLimits{
Ideal: 307200, // We want to save space and traffic but keep to maximum compression
Max: 460800, // Can't go bigger than 450 KB
}
}