123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- package produce
- import (
- "bytes"
- "fmt"
- "image/png"
- "os"
- "github.com/fogleman/gg"
- )
- type imageInfo struct {
- dc *gg.Context
- }
- func (*imageInfo) Runimage(s string) ([]byte, error) {
-
- const padding = 20
- const charWidth = 10
- const lineHeight = 15
- const maxWidth = 800
-
- lines := 0
- width := 0.0
- height := padding * 2
- lineWidth := 0.0
- dc := gg.NewContext(1, 1)
-
- if err := dc.LoadFontFace("../assets/SimHei.ttf", 12); err != nil {
- fmt.Println(err.Error())
- return nil, nil
- }
-
- for _, r := range s {
- w, _ := dc.MeasureString(string(r))
- if r == '\n' || lineWidth+w > float64(maxWidth-padding*2) {
- lines++
- if lineWidth > width {
- width = lineWidth
- }
- lineWidth = 0.0
- }
- lineWidth += w
- }
- lines++
- if lineWidth > width {
- width = lineWidth
- }
- height += (lines) * lineHeight
- dc = gg.NewContext(int(width+float64(padding*2)), int(height))
- dc.SetRGB(0, 0, 0)
- dc.Clear()
- dc.SetRGB(1, 1, 1)
-
- x := padding
- y := padding
- lineWidth = 0.0
- for _, r := range s {
- w, _ := dc.MeasureString(string(r))
- if r == '\n' || lineWidth+w > float64(maxWidth-padding*2) {
- y += lineHeight
- lineWidth = 0.0
- if r == '\n' {
- continue
- }
- }
- dc.DrawString(string(r), float64(x)+lineWidth, float64(y))
- lineWidth += w
- }
-
- var buf bytes.Buffer
- if err := png.Encode(&buf, dc.Image()); err != nil {
- return nil, nil
- }
-
- return buf.Bytes(), nil
- }
- func (im *imageInfo) SaveImage(fileName string) {
-
- name := "../file/test_pic_1.png"
- newfile, err := os.Create(name)
- if err != nil {
- fmt.Println(err.Error())
- return
- }
- defer newfile.Close()
-
-
- err = png.Encode(newfile, im.dc.Image())
- if err != nil {
- fmt.Println(err.Error())
- return
- }
- }
|