func drawString(src image.Image, fontContext *freetype.Context, position raster.Point, text string) { fontContext.SetSrc(src) _, err := fontContext.DrawString(text, position) if err != nil { log.Println(err) } }
func drawBorderedText(c *freetype.Context, text string, x, y int) { // God-awful hack to add a 2px black border around the text. c.SetSrc(image.Black) c.DrawString(text, freetype.Pt(x-2, y-2)) c.DrawString(text, freetype.Pt(x, y-2)) c.DrawString(text, freetype.Pt(x+2, y-2)) c.DrawString(text, freetype.Pt(x-2, y)) c.DrawString(text, freetype.Pt(x+2, y)) c.DrawString(text, freetype.Pt(x-2, y+2)) c.DrawString(text, freetype.Pt(x, y+2)) c.DrawString(text, freetype.Pt(x+2, y+2)) c.SetSrc(image.White) c.DrawString(text, freetype.Pt(x, y)) }
func renderString(s string, c *freetype.Context) (*image.RGBA, int) { estWidth := 8 * len(s) dst := image.NewRGBA(image.Rect(0, 0, estWidth, h)) c.SetDst(dst) c.SetClip(dst.Bounds()) c.SetSrc(&image.Uniform{C: shadow}) pt := freetype.Pt(0, 13) c.DrawString(s, pt) c.SetSrc(image.White) pt = freetype.Pt(0, 12) pt, _ = c.DrawString(s, pt) return dst, getTextOffset(pt) }
func drawText(font *truetype.Font, c *freetype.Context, color color.Color, rgba *image.RGBA, text string) (int, int) { fg := image.NewUniform(color) bg := image.Transparent draw.Draw(rgba, rgba.Bounds(), bg, image.ZP, draw.Src) c.SetFont(font) c.SetDst(rgba) c.SetSrc(fg) c.SetClip(rgba.Bounds()) // height is the fraction of the font that is above the line, 1.0 would mean // that the font never falls below the line // TODO: wtf - this is all wrong! // fix fonts - we can't change the font size easily height := 1.3 pt := freetype.Pt(0, int(float64(c.PointToFix32(*size)>>8)*height)) adv, _ := c.DrawString(text, pt) pt.X += adv.X py := int(float64(pt.Y>>8)/height + 0.01) return int(pt.X >> 8), py }