wcharczuk/go-chart圖表上使用中文字體

https://github.com/wcharczuk/go-chart/ 默認使用的字體是 roboto.Roboto,不支持中文。 git


// GetDefaultFont returns the default font (Roboto-Medium).
func GetDefaultFont() (*truetype.Font, error) {
    if _defaultFont == nil {
        _defaultFontLock.Lock()
        defer _defaultFontLock.Unlock()
        if _defaultFont == nil {
            font, err := truetype.Parse(roboto.Roboto)
            if err != nil {
                return nil, err
            }
            _defaultFont = font
        }
    }
    return _defaultFont, nil
}github

 

當圖表上須要顯示中文字體時就會顯示成 X 。 以下圖golang

NewImage

這時候就要中本身的中文字體了。 下面是使用的一個簡單例子。字體

package mainblog

import (
    "bytes"
    "io/ioutil"
    "log"
    "os"圖片

    "github.com/golang/freetype/truetype"
    "github.com/wcharczuk/go-chart"
    "github.com/wcharczuk/go-chart/drawing"
)get

// getZWFont 加載字體
func getZWFont() *truetype.Font {it

    fontFile := "/Library/Fonts/Microsoft-YaHei.ttf"
    //fontFile := "/Library/Fonts/AppleMyungjo.ttf"io

    // 讀字體數據
    fontBytes, err := ioutil.ReadFile(fontFile)
    if err != nil {
        log.Println(err)
        return nil
    }
    font, err := truetype.Parse(fontBytes)
    if err != nil {
        log.Println(err)
        return nil
    }
    return font
}import

func drawChart() {
    //f, _ := chart.GetDefaultFont() // 自帶默認字體
    f := getZWFont() // 用本身的字體
    r, _ := chart.PNG(1024, 1024)

    chart.Draw.Text(r, "Te郭紅俊多多島ddd", 64, 64, chart.Style{
        FontColor: drawing.ColorBlack,
        FontSize: 18,
        Font: f,
    })

    buffer := bytes.NewBuffer([]byte{})
    r.Save(buffer)

    fo, err := os.Create("o1.png")
    if err != nil {
        panic(err)
    }

    if _, err := fo.Write(buffer.Bytes()); err != nil {
        panic(err)
    }
}

func main() {
    drawChart()
}

 

執行生成的圖片效果以下:

NewImage

相關文章
相關標籤/搜索