• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

go-chart go后端生成图表base64

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
const imgStrPrefix = "data:image/png;base64,"

func imgToStr(imgContent bytes.Buffer) string {
	return imgStrPrefix + base64.StdEncoding.EncodeToString(imgContent.Bytes())
}

func loadTTF(filename string) (ttf *truetype.Font, err error) {
	ttfContent, err := ioutil.ReadFile(app.Cfg.Templatesdir + filename)
	if err != nil {
		return ttf, err
	}
	ttf, err = truetype.Parse(ttfContent)
	return
}

func ToBarChart(title string, data interface{}, xkey string, ykey string, ymin float64, ymax float64, isReverse bool) template.HTML {
	values := make([]chart.Value, 0)
	items, isSucc := data.([]map[string]interface{})
	if !isSucc {
		logger.Errorf("传入数据不符合格式")
		return ""
	}
	if isReverse {
		for i := len(items) - 1; i >= 0; i-- {
			cValueTmp := chart.Value{
				Value: items[i][ykey].(float64),
				Label: items[i][xkey].(string),
			}
			values = append(values, cValueTmp)
		}
	} else {
		for _, item := range items {
			cValueTmp := chart.Value{
				Value: item[ykey].(float64),
				Label: item[xkey].(string),
			}
			values = append(values, cValueTmp)
		}
	}

	ttf, err := loadTTF("MSYH.TTF")
	if err != nil {
		logger.Warnf("加载字体失败:%v", err)
	}
	yrange := chart.ContinuousRange{
		Min: ymin,
		Max: ymax,
	}
	graph := chart.BarChart{
		Font:  ttf,
		Title: title,
		TitleStyle: chart.Style{
			Show:                true,
			TextHorizontalAlign: chart.TextHorizontalAlignCenter,
		},
		XAxis: chart.Style{
			Show:        true,
			StrokeWidth: 1,
		},
		YAxis: chart.YAxis{
			Name: "数量",
			Style: chart.Style{
				Show:        true,
				StrokeWidth: 1,
			},
			Range: &yrange,
			ValueFormatter: func(v interface{}) string {
				if vf, isFloat := v.(float64); isFloat {
					vi := int64(vf)
					return fmt.Sprintf("%d", vi)
				}
				return ""
			},
		},
		Canvas: chart.Style{
			Show: true,
			Padding: chart.Box{
				Top:   4,
				IsSet: true,
			},
			FillColor: drawing.Color{120, 9, 9, 9},
		},
		Background: chart.Style{
			Padding: chart.Box{
				Top: 40,
			},
		},
		Height:   512,
		BarWidth: 60,

		Bars: values,
	}

	//buffer := bytes.NewBuffer([]byte{})
	var buffer bytes.Buffer
	//f,err := os.Create("chart.png")
	err = graph.Render(chart.PNG, &buffer)
	if err != nil {
		logger.Errorf("图表渲染错误:%v", err)
	}
	base64str := imgToStr(buffer)
	return template.HTML(fmt.Sprintf("<img src='%s' />", base64str))
}

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
go基础第二篇:类型发布时间:2022-07-10
下一篇:
记录一次go性能调试的过程发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap