github.com/Kintar/etxt@v0.0.0-20221224033739-2fc69f000137/examples/gtxt/sizer_expand/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  import "github.com/Kintar/etxt/esizer"
    15  
    16  // Must be compiled with '-tags gtxt'
    17  
    18  func main() {
    19  	// get font path
    20  	if len(os.Args) != 2 {
    21  		msg := "Usage: expects one argument with the path to the font to be used\n"
    22  		fmt.Fprint(os.Stderr, msg)
    23  		os.Exit(1)
    24  	}
    25  
    26  	// parse font
    27  	font, fontName, err := etxt.ParseFontFrom(os.Args[1])
    28  	if err != nil {
    29  		log.Fatal(err)
    30  	}
    31  	fmt.Printf("Font loaded: %s\n", fontName)
    32  
    33  	// create cache
    34  	cache := etxt.NewDefaultCache(1024 * 1024 * 1024) // 1GB cache
    35  
    36  	// create and configure renderer
    37  	renderer := etxt.NewStdRenderer()
    38  	renderer.SetCacheHandler(cache.NewHandler())
    39  	renderer.SetSizePx(32)
    40  	renderer.SetFont(font)
    41  	renderer.SetAlign(etxt.YCenter, etxt.XCenter)
    42  	renderer.SetColor(color.RGBA{255, 255, 255, 255}) // white
    43  
    44  	// create sizer and set it too
    45  	padSizer := &esizer.HorzPaddingSizer{}
    46  	renderer.SetSizer(padSizer)
    47  
    48  	// create target image and fill it with black
    49  	outImage := image.NewRGBA(image.Rect(0, 0, 600, 230))
    50  	for i := 3; i < 600*230*4; i += 4 {
    51  		outImage.Pix[i] = 255
    52  	}
    53  
    54  	// set target and draw each line expanding more and more
    55  	renderer.SetTarget(outImage)
    56  	for i := 0; i < 6; i++ {
    57  		padSizer.SetHorzPadding(i * 12) // *
    58  		renderer.Draw("pyramid", 300, (i+1)*32)
    59  
    60  		// * alternative code if we didn't have the sizer locally:
    61  		// sizer := renderer.GetSizer().(*esizer.HorzPaddingSizer)
    62  		// sizer.SetHorzPadding(i*12)
    63  	}
    64  
    65  	// store image as png
    66  	filename, err := filepath.Abs("gtxt_sizer_expand.png")
    67  	if err != nil {
    68  		log.Fatal(err)
    69  	}
    70  	fmt.Printf("Output image: %s\n", filename)
    71  	file, err := os.Create(filename)
    72  	if err != nil {
    73  		log.Fatal(err)
    74  	}
    75  	err = png.Encode(file, outImage)
    76  	if err != nil {
    77  		log.Fatal(err)
    78  	}
    79  	err = file.Close()
    80  	if err != nil {
    81  		log.Fatal(err)
    82  	}
    83  	fmt.Print("Program exited successfully.\n")
    84  }