package thumb var ( SizePrecached = 2048 SizeUncached = 7680 JpegQuality = 95 JpegQualitySmall = 80 Filter = ResampleLanczos ) func MaxSize() int { if SizePrecached > SizeUncached { return SizePrecached } return SizeUncached } func InvalidSize(size int) bool { return size < 0 || size > MaxSize() } type Size struct { Name Name `json:"name"` Source Name `json:"-"` Use string `json:"use"` Width int `json:"w"` Height int `json:"h"` Public bool `json:"-"` Options []ResampleOption `json:"-"` } type SizeMap map[Name]Size // Sizes contains the properties of all thumbnail sizes. var Sizes = SizeMap{ Tile50: {Tile50, Tile500, "Lists", 50, 50, false, []ResampleOption{ResampleFillCenter, ResampleDefault}}, Tile100: {Tile100, Tile500, "Maps", 100, 100, false, []ResampleOption{ResampleFillCenter, ResampleDefault}}, Tile224: {Tile224, Tile500, "TensorFlow, Mosaic", 224, 224, false, []ResampleOption{ResampleFillCenter, ResampleDefault}}, Tile500: {Tile500, "", "Tiles", 500, 500, false, []ResampleOption{ResampleFillCenter, ResampleDefault}}, Colors: {Colors, Fit720, "Color Detection", 3, 3, false, []ResampleOption{ResampleResize, ResampleNearestNeighbor, ResamplePng}}, Left224: {Left224, Fit720, "TensorFlow", 224, 224, false, []ResampleOption{ResampleFillTopLeft, ResampleDefault}}, Right224: {Right224, Fit720, "TensorFlow", 224, 224, false, []ResampleOption{ResampleFillBottomRight, ResampleDefault}}, Fit720: {Fit720, "", "Mobile, TV", 720, 720, true, []ResampleOption{ResampleFit, ResampleDefault}}, Fit1280: {Fit1280, Fit2048, "Mobile, HD Ready TV", 1280, 1024, true, []ResampleOption{ResampleFit, ResampleDefault}}, Fit1920: {Fit1920, Fit2048, "Mobile, Full HD TV", 1920, 1200, true, []ResampleOption{ResampleFit, ResampleDefault}}, Fit2048: {Fit2048, "", "Tablets, Cinema 2K", 2048, 2048, true, []ResampleOption{ResampleFit, ResampleDefault}}, Fit2560: {Fit2560, "", "Quad HD, Retina Display", 2560, 1600, true, []ResampleOption{ResampleFit, ResampleDefault}}, Fit3840: {Fit3840, "", "Ultra HD", 3840, 2400, false, []ResampleOption{ResampleFit, ResampleDefault}}, // Deprecated in favor of fit_4096 Fit4096: {Fit4096, "", "Ultra HD, Retina 4K", 4096, 4096, true, []ResampleOption{ResampleFit, ResampleDefault}}, Fit7680: {Fit7680, "", "8K Ultra HD 2, Retina 6K", 7680, 4320, true, []ResampleOption{ResampleFit, ResampleDefault}}, } // DefaultSizes contains all default size names. var DefaultSizes = []Name{ Fit7680, Fit4096, Fit2560, Fit2048, Fit1920, Fit1280, Fit720, Right224, Left224, Colors, Tile500, Tile224, Tile100, Tile50, } // Find returns the largest default thumbnail type for the given size limit. func Find(limit int) (name Name, size Size) { for _, name = range DefaultSizes { t := Sizes[name] if t.Width <= limit && t.Height <= limit { return name, t } } return "", Size{} } // Uncached tests if thumbnail type exceeds the cached thumbnails size limit. func (s Size) Uncached() bool { return s.Width > SizePrecached || s.Height > SizePrecached } // ExceedsLimit tests if thumbnail type is too large, and can not be rendered at all. func (s Size) ExceedsLimit() bool { return s.Width > MaxSize() || s.Height > MaxSize() }