Большие растровые шрифты хорошо подходят для рекламных вывесок — бегающего текста. До появление этой библиотеки не было удобного способа использовать их в OpenComputers. Но теперь есть.
pastebin get Mz7Ps5jQ /usr/lib/ocbf.lua
Библиотека максимально прозрачна и сама по себе отрисовкой не занимается. Для отрисовки удобно использовать библиотеку Braille Bicycle от товарища @Totoro. Все шрифты хранятся по пути /usr/share/fonts в таком виде:
/usr/share/fonts
├── IBM Plex Serif
│ ├── Bold Italic.ocbf
│ ├── Bold.ocbf
│ ├── Italic.ocbf
│ └── Regular.ocbf
├── Prosto One
│ └── Regular.ocbf
└── Roboto
├── Bold Italic.ocbf
├── Bold.ocbf
├── Italic.ocbf
└── Regular.ocbf
Для конвертирования новых шрифтов можно воспользоваться утилитой на языке Python: ocbf.py. Для ее работы необходимо установить библиотеки PIL, bitarray и tqdm (Python3). OCBF содержит в себе всего две функции:
ocbf.load(family: string, style: string) — находит шрифт по указанному семейству и стилем, парсит его и возвращает объект шрифта. Если первый аргумент — это путь, то поиск производится не будет; вместо этого шрифт будет загружен из указанного файла (обязательно с расширением ocbf)
ocbf.search(family: string, style: string) — находит шрифт и возвращает путь до него.
Все функции ищут шрифт в директориях, указанных в переменной ocbf.path = "/usr/share/fonts:/home/.fonts:.". Из кода видно, что поиск осуществлятся в /usr/share/fonts, /home/.fonts и в текущей директории. Объект шрифта предоставляет следующие методы:
font:drawChar(set: function, size: number, char: string, x: number, y: number) — отрисовывает один символ размером size используя шрифт по координатам (x; y). Функция set принимает три аргумента: координаты точки и значение 1 — точка заполнена и 0 — точка пуста.
font:draw(set: function, size: number, str: string, x: number, y: number) — работает так же, как и font:drawChar, но отрисовывает сразу все символы.
font:width(size: number, str: string — возвращает ширину строки с заданным размерам в точках.
Помимо вышеперечисленных методов также есть свойства font.family, font.style и font.sizes.
Все функции принимают аргумент size. Это высота шрифта в точках. Поскольку используя растровые шрифты невозможно обеспечить поддержку сразу всех размеров, size для разных шрифтов имеет разные допустимые значения. Для каждого размера в шрифте дублируются символы.
Предоставляю также набор шрифтов
Roboto — Regular
Roboto — Bold
Roboto — Italic
Roboto — Bold Italic
IBM Plex Serif — Regular
IBM Plex Serif — Bold
IBM Plex Serif — Italic
IBM Plex Serif — Bold Italic
Prosto One — Regular
Все шрифты кроме Prosto One представлены в размерах 16 и 32 точек, Prosto One — 32 и 64. Имеется поддержка латиницы и кириллицы. Также стоит отметить, что для работы библиотеки необходим Lua 5.3 — используется string.unpack, побитовые операции, UTF-8. Для отрисовки текста на изображении в начале поста использовался следующий код:
local ocbf = require("ocbf")
local braille = require("braille")
local matrix = braille.matrix(320, 200)
local font1 = ocbf.load("Prosto One", "Regular")
local font2 = ocbf.load("Roboto", "Bold")
local font3 = ocbf.load("Roboto", "Regular")
local function set(x, y, v)
braille.set(matrix, x, y, v)
end
font1:draw(set, 64, "OCBF", 4, 1)
font2:draw(set, 32, "Растровые шрифты", 4, 65)
font2:draw(set, 32, "для OpenComputers", 4, 98)
font3:draw(set, 32, "от LeshaInc", 4, 168)
braille.render(matrix, 1, 1)