freetype-go學習

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

freetype-go的源碼在這裡https://code.google.com/p/freetype-go/

它的作用是產生帶文字的png圖片

首先解決的幾個概念:

什麼是FreeType?

FreeType是一個可移植的,高效的字型引擎。

字型在電腦上的顯示有兩種方式:點陣和向量。對於一個字,點陣字型儲存的是每個點的渲染資訊。這個方式的劣勢在於儲存的資料量非常大,並且對放大縮小等操作支援不好。因此出現了向量字型。對於一個字,向量字型儲存的是字的繪製公式。這個繪製公式包括了字型輪廓(outline)和字型精調(hint)。字型輪廓使用貝茲路徑來繪製出字的外部線條。在大解析度的情況下就需要對字型進行精調了。這個繪製字的公式就叫做字型資料(glyph)。在字型檔中,每個字對應一個glyph。那麼字型檔中就存在一個字元對應表(charmap)。

對於向量字型,其中用的最為廣泛的是TrueType。它的副檔名一般為otf或者ttf。在windows,linux,osx上都得到廣泛支援。我們平時看到的.ttf和.ttc的字型檔就是TrueType字型。其中ttc是多個ttf的集合檔案(collection)。

步驟

TrueType只是一個字型,而要讓這個字型在螢幕上顯示,就需要字型驅動庫了。其中FreeType就是這麼一種高效的字型驅動引擎。一個漢字從字型到顯示FreeType大致有幾個步驟:

載入字型

設定字型大小

載入glyph

字型對應大小等轉換

繪製字型

這裡特別注意的是FreeType並不只能驅動TrueType字型,它還可以驅動其他各種向量字型,甚至也可以驅動點陣字型。

freetype-go

所以freetype-go就是用go語言實現了FreeType驅動。

This is an implementation of the Freetype font engine in the Go programming language.

程式碼範例:

// 畫一個帶有text的圖片func (this *Signer) drawStringImage(text string) (image.Image, error) {    fontBytes, err := ioutil.ReadFile(this.fontPath)    if err != nil {        return nil, err    }    font, err := freetype.ParseFont(fontBytes)    if err != nil {        return nil, err    }    fg, bg :=  image.White, image.Black     rgba := image.NewRGBA(image.Rect(0, 0, 900, 900))    draw.Draw(rgba, rgba.Bounds(), bg, image.ZP, draw.Src)    c := freetype.NewContext()    c.SetDPI(this.Dpi)    c.SetFont(font)    c.SetFontSize(this.FontSize)    c.SetClip(rgba.Bounds())    c.SetDst(rgba)    c.SetSrc(fg)    // Draw the text.    pt := freetype.Pt(10, 10+int(c.PointToFix32(12)>>8))    for _, s := range strings.Split(text, "\r\n") {        _, err = c.DrawString(s, pt)        pt.Y += c.PointToFix32(12 * 1.5)    }    return rgba, nil}

參考文檔:

http://blog.csdn.net/absurd/article/details/1354499

https://developer.apple.com/fonts/TTRefMan/

http://www.microsoft.com/typography/otspec/otff.htm

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.