FreeType库(http://www.freetype.org/)是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。支持单色位图、反走样位图的渲染。

     freetype-go就是用go语言实现了FreeType驱动。它的项目地址: https://code.google.com/p/freetype-go

下面是使用它绘制的一个字体效果图:

相关代码:

   1: package main

   2:  

   3: import (

   4:     "code.google.com/p/freetype-go/freetype"

   5:     "fmt"

   6:     "image"

   7:     "image/color"

   8:     "image/png"

   9:     "io/ioutil"

  10:     "log"

  11:     "os"

  12: )

  13:  

  14: const (

  15:     dx       = 100         // 图片的大小 宽度

  16:     dy       = 40          // 图片的大小 高度

  17:     fontFile = "RAVIE.TTF" // 需要使用的字体文件

  18:     fontSize = 20          // 字体尺寸

  19:     fontDPI  = 72          // 屏幕每英寸的分辨率

  20: )

  21:  

  22: func main() {

  23:  

  24:     // 需要保存的文件

  25:     imgcounter := 123

  26:     imgfile, _ := os.Create(fmt.Sprintf("%03d.png", imgcounter))

  27:     defer imgfile.Close()

  28:  

  29:     // 新建一个 指定大小的 RGBA位图

  30:     img := image.NewNRGBA(image.Rect(0, 0, dx, dy))

  31:  

  32:     // 画背景

  33:     for y := 0; y < dy; y++ {

  34:         for x := 0; x < dx; x++ {

  35:             // 设置某个点的颜色,依次是 RGBA

  36:             img.Set(x, y, color.RGBA{uint8(x), uint8(y), 0, 255})

  37:         }

  38:     }

  39:  

  40:     // 读字体数据

  41:     fontBytes, err := ioutil.ReadFile(fontFile)

  42:     if err != nil {

  43:         log.Println(err)

  44:         return

  45:     }

  46:     font, err := freetype.ParseFont(fontBytes)

  47:     if err != nil {

  48:         log.Println(err)

  49:         return

  50:     }

  51:  

  52:     c := freetype.NewContext()

  53:     c.SetDPI(fontDPI)

  54:     c.SetFont(font)

  55:     c.SetFontSize(fontSize)

  56:     c.SetClip(img.Bounds())

  57:     c.SetDst(img)

  58:     c.SetSrc(image.White)

  59:  

  60:     pt := freetype.Pt(10, 10+int(c.PointToFix32(fontSize)>>8)) // 字出现的位置

  61:  

  62:     _, err = c.DrawString("ABCDE", pt)

  63:     if err != nil {

  64:         log.Println(err)

  65:         return

  66:     }

  67:  

  68:     // 以PNG格式保存文件

  69:     err = png.Encode(imgfile, img)

  70:     if err != nil {

  71:         log.Fatal(err)

  72:     }

  73:  

  74: }

Golang 使用FreeType-go进行字体的更多相关文章

  1. 使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果

    前言: Freetype是一个跨平台.开源的字体渲染器,网上很多文章介绍,本人就不啰嗦了.本文重点在于实现文章标题所属的各种效果,不是Freetype的基本使用方法介绍文档,所以对于Freetype不 ...

  2. LOG.ZS.0001.基于Freetype的游戏字体渲染优化思路

    Total Utf8-ucs2 Html_parse Layout Render_string Init_texture Ft_load_glyph 原始 2293 1 26 708 1556 2 1 ...

  3. NeHe OpenGL教程 第四十三课:FreeType库

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  4. freetype 字形解析

    目录 freetype 字形解析 字体管理 数据结构 字体抽象 title: freetype 字形解析 date: 2019/3/7 20:17:46 toc: true --- freetype ...

  5. OpenGL字体绘制

    /* glfont.hpp sdragonx 2019-08-15 00:03:33 opengl字体类,提供初学者参考学习 opengl初始化之后,创建字体 font.init(L"微软雅 ...

  6. LAMP环境搭建教程(原创)

    学习PHP脚本编程语言之前,必须先搭建并熟悉开发环境,开发环境有很多种,例如LAMP.WAMP.MAMP等.这里我介绍一下LAMP环境的搭建,即Linux.Apache.MySQL.PHP环境. 一. ...

  7. LAMP环境搭建教程

    原文:LAMP环境搭建教程 学习PHP脚本编程语言之前,必须先搭建并熟悉开发环境,开发环境有很多种,例如LAMP.WAMP.MAMP等.这里我介绍一下LAMP环境的搭建,即Linux.Apache.M ...

  8. (转)用AGG实现高质量图形输出(四)

    AGG的字符输出 字符输出,对于AGG来说,这个功能可以处于显示流程的 不同位置.比如字体引擎可直接处于“Scanline Rasterizer”层向渲染器提供已处理完毕的扫描线,也可以处于“Vert ...

  9. (转)CentOS5.5 下搭建 PHP 环境(最佳的LAMP环境)

    本文详细阐述在 Linux 系统中搭建 PHP 环境,由于 PHP 就是由 C 语言编写的,最初也是运行在 Linux 系统中,所以Linux 是 PHP 的最佳环境. 关于本文中使用到的软件,请点击 ...

  10. Centos7+Apache2.4+php5.6+mysql5.5搭建Lamp环境——为了wordPress

    最近想搭建个人博客玩玩,挑来挑去发现口碑不错的博客程序是wordpress,简称wp.虽然是学java路线的程序员,但因入行时间太短,至今没有发现较为称手开源的博客程序,如果各位大神有好的推荐,也希望 ...

随机推荐

  1. [USACO5.1] 乐曲主题Musical Themes

    题目链接:戳我 Emmm......hash怎么做啊不会啊 这里是SA后缀数组版本的 就是先两两做差分,作为要处理后缀的数组.普通地求出来h数组之后,我们二分这个答案,然后判定是否合法就行了.是否合法 ...

  2. zookeeper基本操作

    理解Zookeeper的一种方法是将他视为一个提供高可用性的文件系统.它没有文件和目录,但是有一个统一概念的节点,叫做znode,作为数据以及其他znode的容器.znode来自于一个层次级的命名空间 ...

  3. [Other] 应用下载网站的APK/IPA等常见MIME设置

    类型 扩展名 mime 错误做法 安卓安装包 .apk application/vnd.android.package-archive application/vnd.android 苹果安装包 .i ...

  4. [JS深入学习]——数组对象排序

    (转) JavaScript实现多维数组.对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序. sort() 方法用于对数组的元素进行排序.语法如下: arrayObject. ...

  5. 安装Apache时端口号被占用解决方案

    有些朋友的电脑在安装Apache是会遇到端口冲突的问题.以下是一种解决方案 1.打开控制面板的管理工具 2.打开IIS 3.观察网站下的端口号 4.点击绑定 5.更改端口号 6.重新启动即可

  6. 4. Neural Network

    1. 神经网络 首先引入一些便于稍后讨论的新标记: $L$:代表神经网络层数$S_l$:代表第$l$层处理单元的个数$K$:代表多分类中类别种数 2. 前向传播(forward propagation ...

  7. Python小白学习之路(二)—【Pycharm安装与配置】【创建项目】【运算符】【数据类型】

    写在前面: 第二天的学习,感觉比昨天学习相对轻松一些,但是对于我这个编程语言功底很弱的人来说,还是稍稍微有些.....哈尔滨的天气一天天冷了下来,还飘着小雨,不过还是挺有意境的.充实而又忙碌的生活,让 ...

  8. FineReport9.0定义数据连接(创建与SQL Server 2016数据库的连接)

    1.下载并安装好FineReport9.0和SQL Server 2016 2.开始——>所有应用——>Microsoft SQL Server 2016——>SQL Server ...

  9. 剑指offer二十七之字符串的排列

    一.题目 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 二.思路 我们 ...

  10. [摘]HttpContext, HttpRequest, HttpResponse, HttpRuntime, HttpServerUtility

    [摘]http://www.cnblogs.com/fish-li/archive/2011/08/21/2148640.html HttpRuntime HttpRuntime公开了一个静态方法 U ...