Golang 使用FreeType-go进行字体
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进行字体的更多相关文章
- 使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果
前言: Freetype是一个跨平台.开源的字体渲染器,网上很多文章介绍,本人就不啰嗦了.本文重点在于实现文章标题所属的各种效果,不是Freetype的基本使用方法介绍文档,所以对于Freetype不 ...
- LOG.ZS.0001.基于Freetype的游戏字体渲染优化思路
Total Utf8-ucs2 Html_parse Layout Render_string Init_texture Ft_load_glyph 原始 2293 1 26 708 1556 2 1 ...
- NeHe OpenGL教程 第四十三课:FreeType库
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- freetype 字形解析
目录 freetype 字形解析 字体管理 数据结构 字体抽象 title: freetype 字形解析 date: 2019/3/7 20:17:46 toc: true --- freetype ...
- OpenGL字体绘制
/* glfont.hpp sdragonx 2019-08-15 00:03:33 opengl字体类,提供初学者参考学习 opengl初始化之后,创建字体 font.init(L"微软雅 ...
- LAMP环境搭建教程(原创)
学习PHP脚本编程语言之前,必须先搭建并熟悉开发环境,开发环境有很多种,例如LAMP.WAMP.MAMP等.这里我介绍一下LAMP环境的搭建,即Linux.Apache.MySQL.PHP环境. 一. ...
- LAMP环境搭建教程
原文:LAMP环境搭建教程 学习PHP脚本编程语言之前,必须先搭建并熟悉开发环境,开发环境有很多种,例如LAMP.WAMP.MAMP等.这里我介绍一下LAMP环境的搭建,即Linux.Apache.M ...
- (转)用AGG实现高质量图形输出(四)
AGG的字符输出 字符输出,对于AGG来说,这个功能可以处于显示流程的 不同位置.比如字体引擎可直接处于“Scanline Rasterizer”层向渲染器提供已处理完毕的扫描线,也可以处于“Vert ...
- (转)CentOS5.5 下搭建 PHP 环境(最佳的LAMP环境)
本文详细阐述在 Linux 系统中搭建 PHP 环境,由于 PHP 就是由 C 语言编写的,最初也是运行在 Linux 系统中,所以Linux 是 PHP 的最佳环境. 关于本文中使用到的软件,请点击 ...
- Centos7+Apache2.4+php5.6+mysql5.5搭建Lamp环境——为了wordPress
最近想搭建个人博客玩玩,挑来挑去发现口碑不错的博客程序是wordpress,简称wp.虽然是学java路线的程序员,但因入行时间太短,至今没有发现较为称手开源的博客程序,如果各位大神有好的推荐,也希望 ...
随机推荐
- Cordova - OSX中,nodev7.5.0无法安装cordova解决方法!
OSX:10.12.3 node:v7.5.0 结果很搞笑啊,先前怎么安装都不成功,现在居然安装成功了!我认为安装失败最大的原因是:你不能访问谷歌的原因!!!! 使用最新稳定版,有助于安装,可以顺便安 ...
- 简单版nginx lua 完成定向流量分发策略
本文链接:https://www.cnblogs.com/zhenghongxin/p/9131362.html 公司业务前端是使用 “分发层+应用层” 双层nginx架构,目的是为了提高缓存的命中率 ...
- PARSER_JS_PRECISION_RANGE_EXCEEDED 错误
{ [Error: parseLengthCodedNumber: JS precision range exceeded, number is >= 53 bit: "3037620 ...
- C++中将二维数组(静态的和动态的)作为函数的参数传递
在C++编程中,我们经常将数组作为参数传递到另一个函数,数组的维数不同,传递方式也不同,此处将作一个总结,包括一维静态.动态数组,二维静态.动态数组. 一,一维数组(静态.动态一维数组) 1, 一维数 ...
- grub覆盖mbr引导系统
grub覆盖mbr引导系统 0.个人PC,WIN 7 + Kali,easybcd 不起作用,需要制作 kali 安装盘 PS:推荐使用 universal usb installer 制作. 方案一 ...
- 目录打散-hash算法
前几篇说了文件上传,都是上传到了WebRoot下的up目录,这样是不行的,文件多了性能就不行了.文件一般都是分目录存放的,这里讲建目录的一种算法.先看结果,经过本算法建的目录,结构是这样的,还以up目 ...
- Amazon S3 功能介绍
一 .Amazon S3介绍 Amazon Simple Storage Service (Amazon S3) 是一种对象存储,它具有简单的 Web 服务接口,可用于在 Web 上的任何位置存储和检 ...
- SPSS学习系列之SPSS Modeler的帮助文档怎么调出来使用?
不多说,直接上干货! 欢迎大家,加入我的微信公众号:大数据躺过的坑 人工智能躺过的坑 同时,大家可以关注我的个人博客: http://www.cnblogs.com/z ...
- Camtasia Studio的下载
不多说,直接上干货! 具体还没写 https://www.techsmith.com/video-editor.html 欢迎大家,加入我的微信公众号:大数据躺过的坑 人工智能躺过的坑 ...
- AndroidStudio生成自己的Compile依赖
在AndroidStudio中经常使用compile的方式来导入第三方代码,如图所示: 想要拥有自己的依赖,可参考本篇的方法 在github上托管一个带有Android Libray的项目,我们要co ...