Documentation
¶
Index ¶
- Constants
- func DrawMultiline(d font.Drawer, newFace func(float64) font.Face, args MultilineArguments) error
- func ImagesCreate(wi *WelcomerImageService) http.HandlerFunc
- func ImagesGet(wi *WelcomerImageService) http.HandlerFunc
- func RegisterFormat(theme Theme, ...)
- type Bench
- type FaceCache
- type FileCache
- type FontCache
- type GenerateImageArgs
- type GenerateThemeResp
- func CreateBadgeImage(wi *WelcomerImageService, b *bytes.Buffer, args GenerateImageArgs) (GenerateThemeResp, error)
- func CreateRegularImage(wi *WelcomerImageService, b *bytes.Buffer, args GenerateImageArgs) (GenerateThemeResp, error)
- func CreateVerticalImage(wi *WelcomerImageService, b *bytes.Buffer, args GenerateImageArgs) (GenerateThemeResp, error)
- type ImageCache
- type ImageCreateArguments
- type ImageCreateResponse
- type ImageData
- type ImageOpts
- type LastAccess
- type MultilineArguments
- type ProfileAlignment
- type ProfileBorderCurve
- type RequestCache
- type StaticImageCache
- type Theme
- type WelcomerImageConfiguration
- type WelcomerImageService
- func (wi *WelcomerImageService) Close() (err error)
- func (wi *WelcomerImageService) CreateFontPack(font string, size float64) *multiface.Face
- func (wi *WelcomerImageService) CreateFontPackHook(f string) func(float64) font.Face
- func (wi *WelcomerImageService) EncodeImages(b *bytes.Buffer, frames []image.Image, im *ImageCache) (string, error)
- func (wi *WelcomerImageService) FetchAvatar(u int64, a string) (*StaticImageCache, error)
- func (wi *WelcomerImageService) FetchBackground(b string, allowGifs bool) (*ImageCache, error)
- func (wi *WelcomerImageService) FetchFont(f string, size float64) (*FaceCache, *FontCache, error)
- func (wi *WelcomerImageService) GenerateAvatar(avatar *StaticImageCache, imageOpts ImageOpts) (image.Image, error)
- func (wi *WelcomerImageService) GenerateImage(b *bytes.Buffer, imageOpts ImageOpts) (string, error)
- func (wi *WelcomerImageService) HandleRequest(ctx *fasthttp.RequestCtx)
- func (wi *WelcomerImageService) LoadConfiguration(path string) (configuration *WelcomerImageConfiguration, err error)
- func (wi *WelcomerImageService) Open() (err error)
- func (wi *WelcomerImageService) PrometheusFetcher()
- type Xalignment
- type Yalignment
Constants ¶
const ( ConfigurationPath = "welcomerimages.yaml" ErrOnConfigurationFailure = true )
const VERSION = "0.4+120420212236"
VERSION respects semantic versioning.
Variables ¶
This section is empty.
Functions ¶
func DrawMultiline ¶
DrawMultiline draws text using multilines and adds stroke.
func ImagesCreate ¶
func ImagesCreate(wi *WelcomerImageService) http.HandlerFunc
ImagesCreate handles creating images.
func ImagesGet ¶
func ImagesGet(wi *WelcomerImageService) http.HandlerFunc
ImagesGet handles retrieving images.
func RegisterFormat ¶
func RegisterFormat(theme Theme, f func(*WelcomerImageService, *bytes.Buffer, GenerateImageArgs) (GenerateThemeResp, error))
Types ¶
type FaceCache ¶
type FaceCache struct {
LastAccess
Face *font.Face
}
FaceCache stores the Face and when it was last accessed.
type FileCache ¶
type FileCache struct {
LastAccess
Filename string
Ext string
Path string
Body []byte
}
FileCache stores the file body and when it was last accessed.
type FontCache ¶
type FontCache struct {
LastAccessedMu sync.RWMutex
LastAccessed time.Time
Font *sfnt.Font
FaceCacheMu sync.RWMutex
FaceCache map[float64]*FaceCache
}
FontCache stores the Font, last accessed and Faces for different sizes.
type GenerateImageArgs ¶
type GenerateThemeResp ¶
type GenerateThemeResp struct {
// Overlay
Overlay image.Image
// The target size of entire image
TargetImageSize image.Rectangle
TargetImageW, TargetImageH int
// The target size of backgrounds. This is
// equal to TargetImage however changes if
// there is a border.
TargetBackgroundSize image.Rectangle
TargetBackgroundW, TargetBackgroundH int
// Point to move from (0,0) when
// rendering the backgrounds
BackgroundAnchor image.Point
// Point to move from (0,0) when
// rendering the overlay
OverlayAnchor image.Point
}
func CreateBadgeImage ¶
func CreateBadgeImage( wi *WelcomerImageService, b *bytes.Buffer, args GenerateImageArgs) (GenerateThemeResp, error)
func CreateRegularImage ¶
func CreateRegularImage( wi *WelcomerImageService, b *bytes.Buffer, args GenerateImageArgs) (GenerateThemeResp, error)
func CreateVerticalImage ¶
func CreateVerticalImage( wi *WelcomerImageService, b *bytes.Buffer, args GenerateImageArgs) (GenerateThemeResp, error)
type ImageCache ¶
type ImageCache struct {
LastAccess
// The image format that is represented
Format string
Frames []image.Image
// Config is the global color table (palette), width and height. A nil or
// empty-color.Palette Config.ColorModel means that each frame has its own
// color table and there is no global color table.
Config image.Config
// The successive delay times, one per frame, in 100ths of a second.
Delay []int
// LoopCount controls the number of times an animation will be
// restarted during display.
LoopCount int
// Disposal is the successive disposal methods, one per frame.
Disposal []byte
// BackgroundIndex is the background index in the global color table, for
// use with the DisposalBackground disposal method.
BackgroundIndex byte
}
ImageCache stores the image and the extension for it.
func (*ImageCache) GetFrames ¶
func (ic *ImageCache) GetFrames() []image.Image
GetFrames returns a copy of the ImageCache.Frames.
type ImageCreateArguments ¶
type ImageCreateResponse ¶
type ImageData ¶
type ImageData struct {
ID string `json:"id" msgpack:"i"`
GuildID int64 `json:"guild_id" msgpack:"g"`
Size int `json:"size" msgpack:"s"`
Path string `json:"path" msgpack:"p"`
ExpiresAt time.Time `json:"expires_at" msgpack:"e"`
CreatedAt time.Time `json:"created_at" msgpack:"c"`
// contains filtered or unexported fields
}
type ImageOpts ¶
type ImageOpts struct {
// Newline split message
Text string `json:"text"`
GuildId int64 `json:"guild_id"`
UserId int64 `json:"user_id"`
Avatar string `json:"avatar"`
AllowGIF bool `json:"allow_gif"`
// Which theme to use when generating images
Theme Theme `json:"layout"`
// Identifier for background
Background string `json:"background"`
// Identifier for font to use (along with Noto)
Font string `json:"font"`
// Border applied to entire image. If transparent, there is no border.
BorderColour color.RGBA `json:"-"`
BorderColourHex string `json:"border_colour"`
BorderWidth int `json:"border_width"`
// Alignment of left or right (assuming not vertical layout)
ProfileAlignment ProfileAlignment `json:"profile_alignment"`
// Text alignment (left, center, right) (top, middle, bottom)
TextAlignmentX Xalignment `json:"text_alignment_x"`
TextAlignmentY Yalignment `json:"text_alignment_y"`
// Include a border around profile pictures. This also fills
// under the profile.
ProfileBorderColour color.RGBA `json:"-"`
ProfileBorderColourHex string `json:"profile_border_colour"`
// Padding applied to profile pictures inside profile border
ProfileBorderWidth int `json:"profile_border_width"`
// Type of curving on the profile border (circle, rounded, square)
ProfileBorderCurve ProfileBorderCurve `json:"profile_border_curve"`
// Text stroke. If 0, there is no stroke
TextStroke int `json:"text_stroke"`
TextStrokeColour color.RGBA `json:"-"`
TextStrokeColourHex string `json:"text_stroke_colour"`
TextColour color.RGBA `json:"-"`
TextColourHex string `json:"text_colour"`
}
type LastAccess ¶
type LastAccess struct {
sync.RWMutex // Used to stop deletion whilst being used
LastAccessed time.Time
LastAccessedMu sync.RWMutex
}
LastAccess stores the last access of the structure.
type MultilineArguments ¶
type MultilineArguments struct {
DefaultFontSize float64 // default font size to start with
X int
Y int
Width int
Height int
HorizontalAlignment Xalignment
VerticalAlignment Yalignment
StrokeWeight int
StrokeColour color.Color
TextColour color.Color
Text string
}
MultilineArguments is a list of arguments for the DrawMultiline function.
type ProfileAlignment ¶
type ProfileAlignment uint8
const ( FloatLeft ProfileAlignment = iota FloatRight )
type ProfileBorderCurve ¶
type ProfileBorderCurve uint8
const ( CurveCircle ProfileBorderCurve = iota CurveSoft CurveSquare )
type RequestCache ¶
type RequestCache struct {
LastAccess
URL string
Body []byte
}
RequestCache stores the request body and when it was last accessed.
type StaticImageCache ¶
type StaticImageCache struct {
LastAccess
Format string
Image image.Image
}
StaticImageCache stores just an image.
type WelcomerImageConfiguration ¶
type WelcomerImageConfiguration struct {
Logging struct {
Level string `json:"level" yaml:"level"`
ConsoleLoggingEnabled bool `json:"console_logging" yaml:"console_logging"`
FileLoggingEnabled bool `json:"file_logging" yaml:"file_logging"`
EncodeAsJSON bool `json:"encode_as_json" yaml:"encode_as_json"` // Make the framework log as json
Directory string `json:"directory" yaml:"directory"` // Directory to log into.
Filename string `json:"filename" yaml:"filename"` // Name of logfile.
MaxSize int `json:"max_size" yaml:"max_size"` // Size in MB before a new file.
MaxBackups int `json:"max_backups" yaml:"max_backups"` // Number of files to keep.
MaxAge int `json:"max_age" yaml:"max_age"` // Number of days to keep a logfile.
} `json:"logging" yaml:"logging"`
HTTP struct {
Host string `json:"host" yaml:"host"`
BookmarkableURL string `json:"bookmarkable_url" yaml:"bookmarkable_url"`
} `json:"http" yaml:"http"`
Store struct {
// List of paths for fonts to be stored in
FontPath []string `json:"font_path" yaml:"font_path"`
// Path for custom backgrounds to be stored in
BackgroundsPath string `json:"backgrounds_path" yaml:"backgrounds_path"`
// Path that serves static files
StaticPath string `json:"static_path" yaml:"static_path"`
// Path for images to be stored in
StorePath string `json:"store_path" yaml:"store_path"`
// Path of backgrounds that persist throughout the lifespan of the service
StaticBackgroundsPath string `json:"static_backgrounds_path" yaml:"static_backgrounds_path"`
// Name of StaticBackground to serve if failed to load custom one
BackgroundFallback string `json:"background_fallback" yaml:"background_fallback"`
// Font to serve if the one specified was not found
DefaultFont string `json:"default_font" yaml:"default_font"`
// Image to serve if no image was found
DefaultImageLocation string `json:"default_image_location" yaml:"default_image_location"`
// Image to serve when backgrounds fail. If empty will return a 500 rather than continue on
FallbackProfileLocation string `json:"fallback_profile_location" yaml:"fallback_profile_location"`
// Location of index folder to show on home page
IndexLocation string `json:"index_location" yaml:"index_location"`
// Does not require API key to use the image generation endpoints. Useful when localhost only.
AllowAnonymousAccess bool `json:"allow_anonymous_access" yaml:"allow_anonymous_access"`
// Location of embedded KV store.
BoltDBLocation string `json:"bolt_db_location" yaml:"bolt_db_location"`
} `json:"store" yaml:"store"`
Prometheus struct {
Enabled bool `json:"enabled" yaml:"enabled"`
Host string `json:"host" yaml:"host"`
} `json:"prometheus" yaml:"prometheus"`
Internal struct {
ConcurrentQuantizers int `json:"concurrent_quantizers" yaml:"concurrent_quantizers"`
QuantizerSpeed int `json:"quantizer_speed" yaml:"quantizer_speed"`
QuantizerQualityMin int `json:"quantizer_quality_min" yaml:"quantizer_quality_min"`
QuantizerQualityMax int `json:"quantizer_quality_max" yaml:"quantizer_quality_max"`
}
APIKeys []string `json:"api_keys" yaml:"api_keys"`
FallbackFonts []string `json:"fallback_fonts" yaml:"fallback_fonts"`
}
WelcomerImageConfiguration represents the configuration of the service.
type WelcomerImageService ¶
type WelcomerImageService struct {
Logger zerolog.Logger `json:"-"`
Start time.Time `json:"uptime"`
Configuration *WelcomerImageConfiguration `json:"configuration"`
PoolConcurrency limiter.ConcurrencyLimiter `json:"-"`
PoolWaiter sync.WaitGroup `json:"-"`
ServiceClosing abool.AtomicBool `json:"-"`
Router *methodrouter.MethodRouter `json:"-"`
Database *bolt.DB `json:"-"`
DefaultImage ImageData
DefaultImageContent []byte
UseFallbackProfile bool
FallbackProfile *StaticImageCache
FallbackFonts []string
FontCacheMu sync.RWMutex
FontCache map[string]*FontCache
BackgroundCacheMu sync.RWMutex
BackgroundCache map[string]*ImageCache
StaticBackgroundCache map[string]*ImageCache
ProfileCacheMu sync.RWMutex
ProfileCache map[int64]*StaticImageCache
// contains filtered or unexported fields
}
WelcomerImageService stores caches and any analytical data.
func NewService ¶
func NewService(logger io.Writer) (wi *WelcomerImageService, err error)
NewService creates the Welcomer Image service and intializes it.
func (*WelcomerImageService) Close ¶
func (wi *WelcomerImageService) Close() (err error)
Close will gracefully close the application and wait for any images being generated.
func (*WelcomerImageService) CreateFontPack ¶
func (wi *WelcomerImageService) CreateFontPack(font string, size float64) *multiface.Face
CreateFontPack creates a pack of fonts with fallback and the one passed.
func (*WelcomerImageService) CreateFontPackHook ¶
func (wi *WelcomerImageService) CreateFontPackHook(f string) func(float64) font.Face
CreateFontPackHook returns a newFace function with an argument.
func (*WelcomerImageService) EncodeImages ¶
func (wi *WelcomerImageService) EncodeImages(b *bytes.Buffer, frames []image.Image, im *ImageCache) (string, error)
EncodeImages encodes a list of []image.Image and takes an input of AllowGifs. Outputs the file extension.
func (*WelcomerImageService) FetchAvatar ¶
func (wi *WelcomerImageService) FetchAvatar(u int64, a string) (*StaticImageCache, error)
FetchAvatar fetches an avatar from a user id and avatar hash.
func (*WelcomerImageService) FetchBackground ¶
func (wi *WelcomerImageService) FetchBackground(b string, allowGifs bool) (*ImageCache, error)
FetchBackground fetches a background from its id. Returns the image and boolean indicating GIF.
func (*WelcomerImageService) GenerateAvatar ¶
func (wi *WelcomerImageService) GenerateAvatar(avatar *StaticImageCache, imageOpts ImageOpts) (image.Image, error)
GenerateAvatar applies masking and resizing to the avatar. Outputs an image.Image with same dimension as src image.
func (*WelcomerImageService) GenerateImage ¶
GenerateImage generates an Image.
func (*WelcomerImageService) HandleRequest ¶
func (wi *WelcomerImageService) HandleRequest(ctx *fasthttp.RequestCtx)
HandleRequest handles the HTTP requests.
func (*WelcomerImageService) LoadConfiguration ¶
func (wi *WelcomerImageService) LoadConfiguration(path string) (configuration *WelcomerImageConfiguration, err error)
LoadConfiguration loads the service configuration.
func (*WelcomerImageService) Open ¶
func (wi *WelcomerImageService) Open() (err error)
Opens starts up the services and loads the configuration and starts up the HTTP server.
func (*WelcomerImageService) PrometheusFetcher ¶
func (wi *WelcomerImageService) PrometheusFetcher()
PrometheusFetcher fetches extra information such as store usage.
type Xalignment ¶
type Xalignment uint8
const ( AlignLeft Xalignment = iota AlignMiddle AlignRight )
type Yalignment ¶
type Yalignment uint8
const ( AlignTop Yalignment = iota AlignCenter AlignBottom )