Конвертация шрифта из TTF в BDF с разным разрешением по H и V

DarkTiger

Участник
Топикстартер
Сообщения
4
Реакции
0
Добрый день

Есть необходимость перегнать шрифт из ttf в fixed формат, точнее, только кириллицу из него. Первое, что приходит в голову - взять FontForge и сделать в нем все необходимое. Но увы - разрешение в нем можно задать только одно, как для горизонтали, так и для вертикали, а мне требуется непременно разрешение 8х19, вот так:
UEFI: UEFI HII (Part 6): Simple Fonts
Второй вопрос - как сделать при конвертации заполнение строк, в которых нет пикселей, нулями? При конвертации в BDF нулевые строки попросту отбрасываются, и получается меньшее количество строк - а мне потом программно надо перегонять в другой формат , и как узнать, какая строка отброшена - сверху или снизу...
Третий вопрос - конвертер генерит в BDF строки в 16-битном формате, а мне надо в 8-битном: у меня 8 пикселов по горизонтали. Впрочем, это, наверное, автоматом пофиксится, как только я сделаю 8-пиксельное горизонтальное разрешение при конвертации.
Переходя к практике, суть такова: вот символ "W" в BDF файле, полученном при конвертации TTF Arial Narrow в BDF с разрешением 19 пикселей:
STARTCHAR $0057
ENCODING 87
SWIDTH 757 0
DWIDTH 15 0
BBX 14 14 0 0
BITMAP
830C
870C
C78C
4788
4788
4C88
4CC8
6C98
6CD0
6850
6850
3850
3070
3030
ENDCHAR

А вот он же в нужном мне формате:
{ 0x0057, 0x00, {0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xD6,0xD6,0xD6,0xFE,0x6C,0x6C,0x00,0x00,0x00,0x00}}

Может быть, использовать что-то кроме FontForge? Линуксовая утилита ttf2bdf дает еще худшие результаты: хотя в ее чрезвычайно куцем хелпе говорится, что можно конвертировать с разным разрешением по горизонтали и вертикали, на практике установка там 8 пикселей по горизонтали превращает символ в палку, стоящую посредине глифа.

Подскажите, куда копать?
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 808
Реакции
3 434
gbdfed, otf2bdf.
 

DarkTiger

Участник
Топикстартер
Сообщения
4
Реакции
0
Увы, минимальное разрешение по горизонтали - 10 пикселей у gbdfed и 20 пикселей у otf2bdf. Меньше нельзя.
Пока что единственным решением видится вывести вторую половину ASCII кодов в стандартное DOS-окно 640х480, заскриншотить и распарсить получившийся BMP файл по секторам-знакоместам.
Кто-то может предложить решение получше?
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 808
Реакции
3 434
Экспортировать глифы в епс и растеризовать с нужным разрешением.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 137
Реакции
10 835
Фотошопный/иллюстраторовский/кореловский скрипт/макрос
 

Denisbox

15 лет на форуме
Сообщения
402
Реакции
249
Fontlab Bitfonter.
 

DarkTiger

Участник
Топикстартер
Сообщения
4
Реакции
0
Поставил себе пробную версию, на попробовать, но когда гружу туда BDF (TTF не грузит) и задаю Resolution глифа 8х19 получается нечто неприличное и не поддающееся идентификации:
2017-06-13_00-34-59.png

2017-06-13_00-48-42.png

Временное решение я нашел - вывел ASCII в дос-терминал, заскриншотил и распарсил скриншот по знакоместам, но проблема в том, что шрифты в терминале только 8х12, а мне надо 8х19, и ресэмплить по вертикали нельзя - получается уродство, которое без ручной коррекции оставить нельзя. Так что пока пользую приплюснутые символы.
Сверху - нормальные, снизу - мои :)
2017-06-13_00-54-00.png
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 137
Реакции
10 835
C этого момента помедленнее
Так вам что, получается, нужно не универсальный конвертер любого векторного шрифта в растровый 8x19, а просто любой матричный шрифт 8x19 ?
Вторая задача просто гораздо тривиальнее первой, а первая не факт, что имеет решение вообще
Погуглите "matrix raster font cyrillic"
 

DarkTiger

Участник
Топикстартер
Сообщения
4
Реакции
0
Да мне не то чтобы универсальный конвертер любого векторного шрифта... Хочется в идеале взять free (чтобы не иметь потом проблем с копирайтом) TTF шрифт из Линукса/чего угодно и растеризовать его в 8х19. Именно растеризовать, потому что ресэмплинг имеющихся растровых шрифтов на таком разрешении... это видеть надо. Временное решение есть, можно двигаться дальше, но потом все равно придется этот Terminal Font заменять на что-нибудь другое.
Мне вообще задачка вначале тривиальной показалась. Есть векторный шрифт, есть матописание контура символа, попала (при растеризации на данном разрешении) точка внутрь контура символа - ставим 0, нет - 1, спорные точки определяются по весовым коэффициентам, например, общей площади квадратика-точки и отрисованного с помощью кривых символа. Казалось бы - чего тут сложного? Но увы...
Есть огромная куча LCD/LED точечных строковых матриц, для которых в один клик должно делаться описанное выше. Оно и делается некоторыми тулзами, например, GLCD Font Creator, но в них всех (по крайней мере, в тех, что я пробовал) одна и та же проблема - тулза УЖЕ импортирует шрифт с заданными пропорциями, т.е. при размере шрифта в ширину 8 точек, высота будет не больше 12, а ресемплинг битмапа... я уже писал.
Сейчас смотрю узкие TTF шрифты для импорта, но у них зачастую кириллицы нет. А матричные 8х19 - просто не видел. Хотя и поискал.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 137
Реакции
10 835
Есть векторный шрифт, есть матописание контура символа, попала (при растеризации на данном разрешении) точка внутрь контура символа - ставим 0, нет - 1, спорные точки определяются по весовым коэффициентам, например, общей площади квадратика-точки и отрисованного с помощью кривых символа. Казалось бы - чего тут сложного?
Это лишь на первый взгляд
Дело в том, что современные векторные шрифты совершенно не оптимизированы под такое низкое разрешение
Вы же сами с этим столкнулись, масштабируя символы на 8x19
Получается все не здорово
Под данную задачу всегда свои специфические шрифты существовали