首页 > 其他分享 >Golang 使用FreeType-go进行字体

Golang 使用FreeType-go进行字体

时间:2023-06-27 20:03:15浏览次数:43  
标签:FreeType img err image freetype Golang go log

     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

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

Golang 使用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: }

标签:FreeType,img,err,image,freetype,Golang,go,log
From: https://blog.51cto.com/u_15588078/6565296

相关文章

  • Golang空结构体struct{}的作用?
    介绍在平时做项目得时候,经常会看到很多包里面定义了结构体。e.g.在context包里面Context接口中的Done()方法,Done()返回一个是以空结构体定义数据的通道chanstruct{},那这里他是有什么特殊用意吗?我们接下来分析struct{}的作用。struct{}空结构是没有字段的结构类型。下面看示......
  • Uniapp下GoEasy通知栏推送不工作问题排查记录
    我们是uniapp开发的app,项目中的系统消息推送使用的是GoEasyWebsocket实时推送,上线一段时间后,客户反馈说,当app没有在前台运行时也需要想办法通知用户一些重要的系统通知。那么此时通知栏推送就需要集成了。集成通知栏推送很麻烦,国内一些公司做了一些插件来帮我们打通app跟厂商之......
  • 创建django项目
    一、python基本信息python版本:3.8Django版本:2.2django:python写web网站的最好用的框架,mtv框架pip:python自带的包管理工具,管家pip安装一个第三方包:pipinstall包名==版本(pipinstalldjango==2.2)pip卸载:pipuninstall包名pip查看所有包:piplist终端命令行:pythonpytho......
  • gojs禁止画布滚动 完全只读方案
    gojs生成画布后,鼠标滚动,画布的内容会上下移动,以下属性可解决此问题。myDiagram=$(go.Diagram,"graph",{initialContentAlignment:go.Spot.Center,//启动视口中间的所有内容"toolManager.mouseWheelBehavior":go.ToolManager......
  • django框架原理
    一、MTV设计 T模板(Template)接收用户输入后交由V视图(View)去处理,V视图(View)负责连接M模型(Model)进行数据操作、并将操作返回的结果再传送给T模板(Template)进行展示。以上就是Django框架的MTV模式的基本工作原理 二、Django框架的View视图展示机制 在Django服务器......
  • Go语言中的自定义函数类型
    函数类型的基本概念在Go语言中,函数类型是一种将函数作为值的数据类型。与其他类型一样,函数类型可以被声明、赋值给变量,作为参数传递和作为返回值返回。通过函数类型,我们可以将函数看作一种可执行的对象,对其进行操作和处理。自定义函数类型的语法在Go语言中,我们可以使用type......
  • windows11+gcc安装-good
    MSYS2安装之后,在msys的terminal中执行,可以去安装目录下寻找 >pacman-Smingw-w64-ucrt-x86_64-gcc  GetStartedwithC++andMingw-w64inVisualStudioCode>pacman-S--neededbase-develmingw-w64-x86_64-toolchain选择默认参数(直接回车即可),会执行一系列的......
  • 精选Golang高频面试题和答案汇总
    大家好,我是阳哥。之前写的《GO必知必会面试题汇总》,已经阅读破万,收藏230+。也欢迎大家收藏、转发本文。这篇文章给大家整理了17道Go语言高频面试题和答案详解,每道题都给出了代码示例,方便大家更好的理解。1.并发安全性Go语言中的并发安全性是什么?如何确保并发安全性?解答:......
  • django基础
    创建django目录"d:\python"startproject项目名称搭建app#创建apppythonmanage.pystartappapp01#在setting上注册appINSTALLED_APPS=['app01.apps.App01Config',]#在views上写逻辑defindex(request):returnHttpResponse("欢迎使用django&q......
  • go:(三)web编程:socket
    引用:08.1.Socket编程|第八章.Web服务|《GoWeb编程》|Go技术论坛(learnku.com)1.什么是socket: 2.socket如何通信: 3.Socket基础知识:类型:TCPSocket和UDPSocket......