Как преобразовать растровый шрифт (.FON) в шрифт truetype (.TTF)?
Моя программа (win32, Delphi) должна отображать специальные символы в некоторых столбцах таблицы. Для этого я использую специальный шрифт для этих столбцов. Я получил шрифт от своего клиента. Это шрифт .FON. Он работает хорошо на экране, но я часто получаю проблемы, как только я хочу использовать его для печати.
Я хотел бы преобразовать этот шрифт .FON в шрифт truetype (.TTF), чтобы избежать проблем. Мне все равно, если шрифт не масштабируется. Я должен просто выглядеть точно так же, когда он используется на экране с тем же размером, что и размер шрифта по умолчанию для исходного шрифта.
Кто-нибудь знает способ сделать это?
(Нет необходимости в исходном коде. Шрифт не изменится. Этого достаточно, если я найду инструмент для этого)
Изменить: Идеально было бы получить шрифт truetype, где каждый пиксель исходного шрифта преобразуется в векторный черный квадрат (я проверил, перерисовывая несколько символов вручную, он будет работать так, как я хочу).
Изменить 2, используемое решение: Использование FontForge + Autotrace, а затем вручную внести поправки, я смог получить векторный шрифт, который следует за контуром пикселей шрифта растрового изображения. Этот векторный шрифт масштабируется несколько лучше оригинального шрифта и решает проблемы с печатью. См. Принятое сообщение для деталей.
Но мне все еще интересно, если кто-то знает полностью автоматизированное решение.
Ответы
Ответ 1
Использовать FontForge + Autotrace затем сделайте некоторые исправления вручную.
Сначала интегрируйте Autotrace в Fontforge, см. Автотрассировка растровых изображений в FontForge. Вот как я это сделал, так как я не смог использовать версию FontForge win32:
- Загрузите, распакуйте и запустите Portable Ubuntu Tres. Это специальная версия Linux, которая работает под Windows!
- Выберите System- > Administration- > Add/Remove Applications, найдите FontForge и установите его (пароль администратора - 123456). У меня установлена FontForge версия 20090622.
- Загрузите autotrace-0.31.1.tar.gz из http://autotrace.sourceforge.net/index.html#download и скопируйте его в свой домашний каталог в Portable Ubuntu.
-
В Portable Ubuntu выберите Applications- > Accessories- > Terminal для компиляции и установки autotrace:
sudo bash (password is 123456)
gunzip autotrace-0.31.1.tar.gz
tar xf autotrace-0.31.1.tar
cd autotrace-0.31.1
./configure
make
make install
Затем преобразуйте шрифт:
- Запустите FontForge в Portable Ubuntu и откройте шрифт .FON.
- Сохраните шрифт в качестве шрифта .BDF(загрузка файла .FON в качестве фона не работала для меня, поэтому мне пришлось сначала преобразовать шрифт): File- > Generate Fonts и выбрать BDF в качестве формата.
- Создайте новый шрифт и импортируйте шрифт BDF в качестве фонового шрифта: File- > Import и не забудьте выбрать "Как фон".
-
Выберите все символы и запустите автотрассировку, удерживая клавишу shift, чтобы вы могли вводить параметры для автотрассы. Я использовал следующие параметры, которые улучшили распознавание контура пикселей, но я не нашел идеальных параметров:
-corner-surround=1 -line-threshold=10
- Исправить символы вручную, используя в основном функцию "Добавить точку кривой".
Активация View- > Show- > Почти горизонтальные/вертикальные линии облегчают работу.
- Создайте шрифт TrueType: File- > Generate Fonts и выберите TrueType как формат.
Ответ 2
Я знаю, что этот вопрос старый, но для чего мне стоило легко преобразовать старый .fon в .ttf, используя PixFont, Я запускал его как администратор (без инсталляций - исполняемый файл старой школы на месте), и он генерировал хороший TTF, хотя в исходном .fon отсутствовали некоторые правильные глифы.
И, хотя он не является бесплатным, он равен 29 долларам, особенно по сравнению с очень дорогими коммерческими продуктами.
Ответ 3
Для тех, кто не хочет компилировать fontforge (для Windows), загрузите здесь:
http://www.mpetroff.net/software/fontforge-windows/
В этой сборке используется potrace вместо autotrace. Лучшие параметры, которые я получил для шрифта, который я конвертировал (vgasys.fon), были:
--turdsize 0 --opttolerance 0 --unit 1 --longcurve --gamma 0 --blacklevel 0 --cleartext
Было все еще часами ручной работы, чтобы шрифт выглядел хорошо (путем добавления и удаления точек).
Ответ 4
Использование FontForge Мне удалось создать соответствующий шрифт TrueType, который дает точно такие же символы, что и исходный шрифт, когда используется хороший размер. Может быть, мне все еще нужно настроить некоторые параметры, потому что я использовал свой оригинальный шрифт размером size = 11. Новый шрифт работает только с размером = 10,5, что невозможно использовать в delphi. Шрифт выглядит ужасно при любых других размерах.
- Загрузите шрифт .FON в FontForge
- Выберите File- > Generate Fonts
- Выберите "(поддельный) растровый файл MS только sfnt (ttf)" как тип, введите имя файла и нажмите "сохранить".
По-видимому, он использует возможность хранения растровых шрифтов в шрифте truetype. Полученный шрифт не имеет проблем с моими растровыми шрифтами, но он полностью пуст на принтере, так что он не решает мою проблему.
Заметка о FontForge:
Мне не удалось установить версию Windows FontForge (на основе cygwin). Вместо этого я установил Portable Ubuntu Tres, которая представляет собой версию Linux, которая работает в Windows. Он прост в установке: распакуйте файл и запустите exe. Затем выберите System- > Administration- > Add/Remove Applications и найдите FontForge и установите его (пароль администратора - 123456). У меня установлена FontForge версия 20090622.
Ответ 5
Возможно, возможно использовать инструмент командной строки SBIT32 fom Microsoft. Легко преобразовать файл .FON в файл .BDF, используя FontForge. Но тогда вам нужно написать файл показателей (.MET). Я не пробовал, потому что я предполагаю, что я получу шрифт truetype со встроенным шрифтом растровых изображений, и можно создавать такие шрифты непосредственно с помощью FontForge (введите "(поддельный) растровый файл MS только sfnt (ttf)" в разделе "Файл- > Генерировать шрифты" ).
Ответ 6
Я обнаружил, что самый простой путь к получению хорошей TTF-версии FON - использовать один из бесплатных онлайн-редакторов шрифтов растровых изображений. Вам нужно вручную вводить каждый глиф, но процесс намного проще, чем приступать к FontForge. Есть два редактора, о которых я знаю, и оба они создают TTF, которые отлично работают в Windows и Linux.
BitFontMaker является более простым из двух. Мне нравится его чистый интерфейс, но я не использовал его, потому что моноширинные шрифты могут иметь ширину ячейки от 10 до 14 пикселей.
FontStruct требует регистрации и использует интерфейс Flash. Я смог быстро создавать новые шрифты, как только я привык к интерфейсу. (Возможно, это совпадение, но я заметил всплеск спама на учетной записи электронной почты, которую я использовал для регистрации.)
Оба редактора автоматически устанавливают межстрочный интервал. Трюк, чтобы получить промежуток, который вы хотите, состоит в том, чтобы добавить высокий пиксель на один символ, а затем использовать редактор векторных шрифтов, чтобы удалить его из TTF. (Тип свет работает хорошо и намного проще в использовании, чем FontForge.)
Ответ 7
В соответствии с описанием продукта BitFonter 3.0, похоже, может это сделать:
"Мощное преобразование растровых изображений и растровых шрифтов из шрифтов Type 1, TrueType и OpenType через интеграцию с FontLab Studio и TypeTool".
Но 999 долларов США немного дороже конвертировать только один шрифт.
Ответ 8
Вряд ли вы можете сделать это с помощью простого бесплатного инструмента. http://www.fontlab.com есть инструменты для этого, но они очень дороги.
Ответ 9
Я нашел, что искал эти шрифты для использования с проектом, над которым я работаю. Опираясь на мысль о ручном редактировании всех глифов, как упоминалось в других ответах, я продолжал искать. В конце концов я наткнулся на сайт с оригинальным шрифтом, а также с некоторыми новыми вариантами .ttf
. Если вам все равно, что некоторые из глифов были переназначены (они все еще присутствуют), это хорошая альтернатива: Шрифты Oldschool PC, В качестве дополнительного бонуса для меня эта поддержка расширила латинские, греческие, кириллические и ивритские скрипты плюс кучу дополнительных символов и символов Unicode.
Ответ 10
Я не мог заставить autotrace работать, поэтому я написал A python script для отслеживания черно-белых изображений в векторные многоугольники, по одному для каждого пикселя.
Итак, с папкой с изображениями глифов, вы можете преобразовать ее в папку с файлами svg
.
Затем в Inkscape union + упростите путь для очистки каждого глифа. (может выполняться в командной строке с помощью Inkscape)
Наконец импортируйте соответствующий svg
в FontForge для каждого символа.
- > script размещен на gist.gisthub.com
from PIL import Image
import svgwrite
import os
import argparse
def bmp_to_svg(filename, multiply =1):
img = Image.open(filename)
w, h = img.size
pixel_acc = img.load()
generated_paths = paths_gen(pixel_acc, w,h, multiply=multiply)
dwg = svgwrite.Drawing(profile='tiny')
for path in generated_paths:
options = path
kwoptions = {} #{"fill":"black"}
dwg.add(dwg.polygon(options, **kwoptions))
#clip_path = dwg.defs.add(dwg.clipPath())
#clip_path.add(dwg.Rect(insert=(0,0), size=((w*multiply)+1, (h*multiply)+1)))
return dwg
def paths_gen(pixel_acc, w, h, multiply = 1):
m = multiply
paths = []
for y in range(0,h):
for x in range(0,w):
pix = pixel_acc[x,y]
brightval = sum(pix) /3
if brightval < 128:
paths.append([
##top left
(x * m, y * m),
##top right
((x+1) * m, y * m),
##bottom right
((x+1) * m, (y+1) * m),
##bottom list
((x) * m, (y+1) * m),
##close back to top left
#(x, y),
])
return paths
def main():
parser = argparse.ArgumentParser(
description='Script to convert black and white images into vector art')
parser.add_argument("input_dir")
parser.add_argument("ouput_dir")
parser.add_argument("in_ext", default="bmp", help="file extension of images in input folder")
parser.add_argument("-m", "--multiply", default=1, type=int)
## TODO
#parser.add_argument("-u", "--union", store=True, help="unifies adjecent polgons")
#parser.add_argument("-s", "--simplify", store=True, help="removes points that are part of a straight line")
#parser.add_argument("-c", "--compress", store=True, help="same as '--union --simplify'")
args = parser.parse_args()
cdir = os.path.abspath(args.input_dir)
fn_gen = ( x for x in os.listdir(cdir)
if x.endswith('.'+args.in_ext)
)
for count, filename in enumerate(fn_gen):
full_filename = os.path.join(cdir, filename)
new_fn = "{}_.svg".format(filename)
new_fullfn = os.path.join(args.ouput_dir, new_fn)
svg = bmp_to_svg(full_filename, multiply=args.multiply)
print "Converted file: '{}'".format(full_filename)
svg.filename = new_fullfn
svg.save()
if __name__ == '__main__':
main()