Golang vips: как отображать текст с помощью собственного шрифта truetype?

Когда мы хотим отрендерить текст как изображение 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, но код делает предположение, что этот шрифт существует, что не является решением для написания машинно-независимой программы. Поэтому мне интересно, есть ли лучший способ сделать это, чтобы мы могли отправлять исполняемые файлы вместе с файлом шрифта.


person Junji Zhi    schedule 07.07.2016    source источник


Ответы (1)


vips использует стандартные имена шрифтов fontconfig, поэтому вам нужно настроить fontconfig, чтобы добавить свой собственный шрифт в его путь поиска.

Из руководства видно, что вы можете установить переменную среды XDG_CONFIG_HOME в точку к вашему новому шрифту, затем перейдите к этому шрифту как 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

И убедитесь, что вы видите два разных изображения.

person jcupitt    schedule 08.07.2016
comment
Спасибо за указание на переменную env. Я нашел эту ссылку: superuser.com/questions/365847/. Таким образом, значение по умолчанию XDG_CONFIG_HOME равно $HOME/.config, и именно туда я должен поместить файл ttf. - person Junji Zhi; 09.07.2016