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学习相关推荐

  1. Freetype学习笔记(轉)

    Freetype学习笔记 转载时请注明出处:http://blog.csdn.net/absurd GTK+(基于DirectFB)的字体绘制是通过pango+freetype+fontconfig三 ...

  2. Freetype学习笔记

    Freetype学习笔记 转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd 作者联系方式:Li XianJing <xianjimli at hotmail ...

  3. FreeType 学习笔记

    GTK+(基于DirectFB)的字体绘制是通过pango+freetype+fontconfig三者协 作来完成的,其中,fontconfig负责字体的管理和配置,freetype负责单个字符的绘制 ...

  4. 韦东山 数码相框 项目学习(四)简易的TXT文档显示器(电纸书)

    韦东山 数码相框 项目学习(四)简易的TXT文档显示器(电纸书) 有了前面关于LCD.freetype的学习,已经可以开始TXT文档显示器的编写了.整个实现过程并不复杂,必须要弄清楚的是freetyp ...

  5. libgdx学习记录9——FreeType,ttf中文显示

    前面讲到使用Hireo创建的BitmapFont以显示中文字体.这种方式效率很高,当所要显示的字的总数较少,并且大小比较固定时,可以采用这种方式. 但是这种也有弊端: (1)字体大小不能随意设置,当放 ...

  6. WhyGL:一套学习OpenGL的框架,及翻写Nehe的OpenGL教程

    最近在重学OpenGL,之所以说重学是因为上次接触OpenGL还是在学校里,工作之后就一直在搞D3D,一转眼已经毕业6年了.OpenGL这门手艺早就完全荒废了,现在只能是重学.学习程序最有效的办法是动 ...

  7. 优化你的CPU来做深度学习

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 导读 对于想学习深度学习的同学们来说,学习资源网上有很多,但是计算 ...

  8. Android开发学习——android体系结构

    Android的体系结构采用了分层架构的思想, 从上层到底层共包括四层,分别是应用程序程序层.应用框架层.系统库和Android运行时和Linux内核. 一 应用程序层 该层提供一些核心应用程序包,例 ...

  9. vs移植的.exe再编译无法更新_关于freetype的移植和其官方demos的使用总结

    # 关于freetype的移植和其官方demos的使用总结 转载时请标明出处 作者联系方式QQ:854290197 一.Windows下移植feetype到工程中 步骤如下: 1.从官网上下载最新的 ...

  10. qt char*转int_Qt在Linux下绘制文字原理-使用FreeType来绘制字形

    原文链接 Qt源码那些事儿-Qt绘制文字原理_使用FreeType来绘制字形​www.cryfeifei.cn 前言 Qt在Linux绘制字体是使用的FreeType. FreeType是一个用C语言 ...

最新文章

  1. 世界顶级摄影作品,构图的最高境界!
  2. strings 命令——ELF文件格式与“链接和装载”
  3. 【Linux学习】epoll详解
  4. 阿里云Redis开发规范[转]
  5. Java概述、环境变量、注释、关键字、标识符、常量
  6. Intel超线程技术 Hyper-Threading Technology (6) - 后期增强(Nehalem/Haswell/Skylake)
  7. 别说我不懂排序!几种常见排序算法(一)
  8. 解决Ubuntu 显卡驱动升级导致的 显卡驱动和内核版本不匹配的问题
  9. java毕向东练习题,java中的String类的练习(来自毕向东老师视频资料)
  10. 内网远程桌面控制软件Radmin
  11. 干货丨2021年UI设计风格新风向新趋势
  12. 绿盟 java 面试_绿盟科技校园招聘面试经验|面试问题(共52条)- 职业圈
  13. 100兆宽带下载速度为什么没有100兆/秒
  14. 数据库索引的分类,类型,索引的优缺点,索引的优化
  15. 早上空腹喝酸奶好吗?
  16. 部分选主元matlab,部分选主元的Doolittle分解 | 学步园
  17. 有道云笔记 协作android版,有道云笔记Android版升级_软件资讯软件快报-中关村在线...
  18. h5是html语言吗,H5和HTML5是一样的吗
  19. c语言把结构体首地址放入指针,C语言基础———指针,结构体指针,函数指针
  20. TrueNorth: Design and Tool Flow of a 65 mW 1 Million Neuron Programmable Neurosynaptic Chip

热门文章

  1. python给用户打标签_python用户评论标签匹配的解决方法
  2. 模型训练 准确率下降_手写批量线性回归算法:在Python3中梯度下降方法实现模型训练
  3. C#教程8:面向对象编程【02】
  4. 关于Gauss-Seidel迭代法的Python实现
  5. cloc JAVA文件_工具-cloc代码行数统计工具
  6. java继承和引用_浅谈Java继承、传递
  7. php多态的实际运用,7.9.1 PHP多态的应用实例
  8. java 0000 0001 0002 000a 000b_Java代码编译后的class文件
  9. 进制转换(sdut1252)_JAVA
  10. 第二天2017/03/29: 字符串操作