github.com/kintar/etxt@v0.0.9/examples/gtxt/quantization/main.go (about) 1 //go:build gtxt 2 3 package main 4 5 import "os" 6 import "image" 7 import "image/color" 8 import "image/png" 9 import "path/filepath" 10 import "log" 11 import "fmt" 12 13 import "github.com/kintar/etxt" 14 15 // Must be compiled with '-tags gtxt' 16 17 func main() { 18 // get font path 19 if len(os.Args) != 2 { 20 msg := "Usage: expects one argument with the path to the font to be used\n" 21 fmt.Fprint(os.Stderr, msg) 22 os.Exit(1) 23 } 24 25 // parse font 26 font, fontName, err := etxt.ParseFontFrom(os.Args[1]) 27 if err != nil { 28 log.Fatal(err) 29 } 30 fmt.Printf("Font loaded: %s\n", fontName) 31 32 // create cache 33 cache := etxt.NewDefaultCache(1024 * 1024 * 1024) // 1GB cache 34 35 // create and configure renderer 36 renderer := etxt.NewStdRenderer() 37 renderer.SetCacheHandler(cache.NewHandler()) 38 renderer.SetSizePx(20) 39 renderer.SetFont(font) 40 renderer.SetVertAlign(etxt.Top) 41 renderer.SetColor(color.RGBA{0, 0, 0, 255}) // black 42 43 // create target image and fill it with white 44 outImage := image.NewRGBA(image.Rect(0, 0, 640, 64)) 45 for i := 0; i < 640*64*4; i++ { 46 outImage.Pix[i] = 255 47 } 48 49 // set target and draw 50 renderer.SetTarget(outImage) 51 renderer.Draw("Horizontally quantized vs unquantized text. [quantized]", 8, 8) 52 53 // disable horizontal quantization and draw again 54 renderer.SetQuantizerStep(1, 64) 55 renderer.Draw("Horizontally quantized vs unquantized text. [unquantized]", 8, 32) 56 57 // store image as png 58 filename, err := filepath.Abs("gtxt_quantization.png") 59 if err != nil { 60 log.Fatal(err) 61 } 62 fmt.Printf("Output image: %s\n", filename) 63 file, err := os.Create(filename) 64 if err != nil { 65 log.Fatal(err) 66 } 67 err = png.Encode(file, outImage) 68 if err != nil { 69 log.Fatal(err) 70 } 71 err = file.Close() 72 if err != nil { 73 log.Fatal(err) 74 } 75 fmt.Print("Program exited successfully.\n") 76 }