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学习相关推荐
- Freetype学习笔记(轉)
Freetype学习笔记 转载时请注明出处:http://blog.csdn.net/absurd GTK+(基于DirectFB)的字体绘制是通过pango+freetype+fontconfig三 ...
- Freetype学习笔记
Freetype学习笔记 转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd 作者联系方式:Li XianJing <xianjimli at hotmail ...
- FreeType 学习笔记
GTK+(基于DirectFB)的字体绘制是通过pango+freetype+fontconfig三者协 作来完成的,其中,fontconfig负责字体的管理和配置,freetype负责单个字符的绘制 ...
- 韦东山 数码相框 项目学习(四)简易的TXT文档显示器(电纸书)
韦东山 数码相框 项目学习(四)简易的TXT文档显示器(电纸书) 有了前面关于LCD.freetype的学习,已经可以开始TXT文档显示器的编写了.整个实现过程并不复杂,必须要弄清楚的是freetyp ...
- libgdx学习记录9——FreeType,ttf中文显示
前面讲到使用Hireo创建的BitmapFont以显示中文字体.这种方式效率很高,当所要显示的字的总数较少,并且大小比较固定时,可以采用这种方式. 但是这种也有弊端: (1)字体大小不能随意设置,当放 ...
- WhyGL:一套学习OpenGL的框架,及翻写Nehe的OpenGL教程
最近在重学OpenGL,之所以说重学是因为上次接触OpenGL还是在学校里,工作之后就一直在搞D3D,一转眼已经毕业6年了.OpenGL这门手艺早就完全荒废了,现在只能是重学.学习程序最有效的办法是动 ...
- 优化你的CPU来做深度学习
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 导读 对于想学习深度学习的同学们来说,学习资源网上有很多,但是计算 ...
- Android开发学习——android体系结构
Android的体系结构采用了分层架构的思想, 从上层到底层共包括四层,分别是应用程序程序层.应用框架层.系统库和Android运行时和Linux内核. 一 应用程序层 该层提供一些核心应用程序包,例 ...
- vs移植的.exe再编译无法更新_关于freetype的移植和其官方demos的使用总结
# 关于freetype的移植和其官方demos的使用总结 转载时请标明出处 作者联系方式QQ:854290197 一.Windows下移植feetype到工程中 步骤如下: 1.从官网上下载最新的 ...
- qt char*转int_Qt在Linux下绘制文字原理-使用FreeType来绘制字形
原文链接 Qt源码那些事儿-Qt绘制文字原理_使用FreeType来绘制字形www.cryfeifei.cn 前言 Qt在Linux绘制字体是使用的FreeType. FreeType是一个用C语言 ...
最新文章
- 世界顶级摄影作品,构图的最高境界!
- strings 命令——ELF文件格式与“链接和装载”
- 【Linux学习】epoll详解
- 阿里云Redis开发规范[转]
- Java概述、环境变量、注释、关键字、标识符、常量
- Intel超线程技术 Hyper-Threading Technology (6) - 后期增强(Nehalem/Haswell/Skylake)
- 别说我不懂排序!几种常见排序算法(一)
- 解决Ubuntu 显卡驱动升级导致的 显卡驱动和内核版本不匹配的问题
- java毕向东练习题,java中的String类的练习(来自毕向东老师视频资料)
- 内网远程桌面控制软件Radmin
- 干货丨2021年UI设计风格新风向新趋势
- 绿盟 java 面试_绿盟科技校园招聘面试经验|面试问题(共52条)- 职业圈
- 100兆宽带下载速度为什么没有100兆/秒
- 数据库索引的分类,类型,索引的优缺点,索引的优化
- 早上空腹喝酸奶好吗?
- 部分选主元matlab,部分选主元的Doolittle分解 | 学步园
- 有道云笔记 协作android版,有道云笔记Android版升级_软件资讯软件快报-中关村在线...
- h5是html语言吗,H5和HTML5是一样的吗
- c语言把结构体首地址放入指针,C语言基础———指针,结构体指针,函数指针
- TrueNorth: Design and Tool Flow of a 65 mW 1 Million Neuron Programmable Neurosynaptic Chip
热门文章
- python给用户打标签_python用户评论标签匹配的解决方法
- 模型训练 准确率下降_手写批量线性回归算法:在Python3中梯度下降方法实现模型训练
- C#教程8:面向对象编程【02】
- 关于Gauss-Seidel迭代法的Python实现
- cloc JAVA文件_工具-cloc代码行数统计工具
- java继承和引用_浅谈Java继承、传递
- php多态的实际运用,7.9.1 PHP多态的应用实例
- java 0000 0001 0002 000a 000b_Java代码编译后的class文件
- 进制转换(sdut1252)_JAVA
- 第二天2017/03/29: 字符串操作