Golang vips:如何使用自定义 TrueType 字体呈现文本?
Golang vips: How to render text with custom truetype font?
当我们想要将文本呈现为 vips 图像时,您可以使用 vips_text:
import "C"
var textImage *C.VipsImage
cText := C.CString("Some text")
cFont := C.CString("Arial 12px")
C.cgo_vips_text(&textImage, cText, cFont)
但是这里,Arial 12px
是一个 fontconfig 字符串名称,并假设系统已经安装了这个字体。
如何让程序使用自定义的 TrueType 字体文件,例如 Roboto.ttf
?
正在尝试
cFont := C.CString("Roboto.ttf")
可能行不通。
我们可以把Roboto.ttf
文件放在系统目录下,比如在Ubuntu你把文件放在/usr/share/fonts/truetype
,但是代码假设这个字体存在,这不是编写机器无关程序的解决方案。所以我想知道是否有更好的方法来做到这一点,以便我们可以将可执行文件与字体文件一起发送。
vips 使用标准的 fontconfig 字体名称,因此您需要设置 fontconfig 以将自定义字体添加到其搜索路径。
From the manual 看起来您可以设置环境变量 XDG_CONFIG_HOME
以指向您的新字体,然后从 go 开始将该字体引用为 Roboto 48pt
(例如)。
从命令行测试很容易。尝试:
$ fc-match "Roboto"
Roboto-Regular.ttf: "Roboto" "Regular"
$ vips text x2.png "hello" --font "Roboto 48px"
$ vips text x.png "hello" --font "Arial 48px"
$ eog x.png x2.png
并确保您看到两张不同的图片。
当我们想要将文本呈现为 vips 图像时,您可以使用 vips_text:
import "C"
var textImage *C.VipsImage
cText := C.CString("Some text")
cFont := C.CString("Arial 12px")
C.cgo_vips_text(&textImage, cText, cFont)
但是这里,Arial 12px
是一个 fontconfig 字符串名称,并假设系统已经安装了这个字体。
如何让程序使用自定义的 TrueType 字体文件,例如 Roboto.ttf
?
正在尝试
cFont := C.CString("Roboto.ttf")
可能行不通。
我们可以把Roboto.ttf
文件放在系统目录下,比如在Ubuntu你把文件放在/usr/share/fonts/truetype
,但是代码假设这个字体存在,这不是编写机器无关程序的解决方案。所以我想知道是否有更好的方法来做到这一点,以便我们可以将可执行文件与字体文件一起发送。
vips 使用标准的 fontconfig 字体名称,因此您需要设置 fontconfig 以将自定义字体添加到其搜索路径。
From the manual 看起来您可以设置环境变量 XDG_CONFIG_HOME
以指向您的新字体,然后从 go 开始将该字体引用为 Roboto 48pt
(例如)。
从命令行测试很容易。尝试:
$ fc-match "Roboto"
Roboto-Regular.ttf: "Roboto" "Regular"
$ vips text x2.png "hello" --font "Roboto 48px"
$ vips text x.png "hello" --font "Arial 48px"
$ eog x.png x2.png
并确保您看到两张不同的图片。