freetype-go学习
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
總結
以上是生活随笔為你收集整理的freetype-go学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ABAP语法完整版
- 下一篇: SAP HANA中创建与时间相关的数据及