1

当我们想要将文本渲染为 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,但是代码假设这个字体存在,这不是编写机器无关程序的解决方案。所以我想知道是否有更好的方法来做到这一点,以便我们可以将可执行文件与字体文件一起发送。

4

1 回答 1

1

vips 使用标准 fontconfig 字体名称,因此您需要设置 fontconfig 以将自定义字体添加到其搜索路径。

从手册看来,您可以将环境变量设置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

并确保您看到两个不同的图像。

于 2016-07-08T11:53:03.113 回答