6

Конвертор шрифтов для embedded

https://github.com/lvgl/lv_font_conv


Если кто застал, на первых пиратских CD с играми писали “озвучено профессиональными программистами”. Выглядело совершенно психоделично. Потом правда поменяли на “озвучено профессиональными актерами”. Но мне почему-то кажется, что программисты, которых заменили актерами, с тех пор переключились на дизайн в embedded и занимаются этим до сих пор. Иначе трудно объяснить, почему когда смотришь на многие “железки”, глаза готовы лопнуть от напряжения.


Про дизайн можно говорить долго, но остановимся на самом очевидном - шрифтах. Ну допустим, рендеринг TTF-шрифтов на лету действительно тяжеловат для чахлого микроконтроллера. И ограничения по памяти довольно серьезные. Но это же не повод забивать болт на кернинг, антиалиасинг, субпиксельное сглаживание, и втыкать везде “шрифт которые принес кореш на флешке” с непонятной лицензией. Так что пришлось мне в рамках программы по улучшения мира заняться еще и шрифтами для эмбедов.


Общий принцип понятен:


- нужны битмапные шрифты

- с поддержкой grayscale (на канал прозрачности, для антиалиасинга)

- c легковесной компрессией (актуально для больших букв)

- с опциональным 3х разрешением по горизонтали (для субпиксельного сглаживания)


Как выяснилось, стандарты битмапных шрифтов тормознулись на BDF. Пришлось слегка поизобретать лисапед. Поскольку в свое время делал fontello, то шрифтовые потроха представляю неплохо. В принципе, TTF умеет хранить внутри битмапы, но там довольно много legacy шлака, и компрессия либо убогая, либо слишком сложная. Поэтому утянул из TTF сколько сумел, дополнив недостающим по минимуму. Вышло IMO неплохо:

Конвертор шрифтов для embedded

На дисплее шрифт Roboto, размер 12px и 14px.


Естественно, поддерживаются далеко не все фичи, которые навертели в OpenType. Тот же кернинг - на уровне таблицы “kern”, без мозголомных вариантов “GPOS”. Но думаю что под незамысловатые потребности эмбедов лет на десять хватит. Ну а потом… может все микроконтроллеры уже пойдут с гигабайтом памяти на борту, и все эти ухищрения станут не актуальны.


Почему это здорово


- Ну во-первых, это красиво :)

- Можно взять любой векторный шрифт, и выдрать из него подмножество для нужных языков

- Можно объединять разные шрифты (например, добавляя к буквам иконки)

- Можно упорядочить свои проекты, используя современные шрифты, с понятными источниками и лицензиями.


Для OLED можно найти pixel-perfect TTF шрифты под разные зазмеры. Ну а если экран цветной - за счет субпиксельного сглаживания можно использовать вообще все что угодно, с прекрасным результатом.


Конкретно сейчас, разработанная спецификация и конвертор используется в GUI LittlevGL. Но формат шрифтов универсальный, и не привязан к какой-либо библиотеке или языку. Сам конвертор тоже универсальный, написан на node.js.


Всем добра!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества