Как преобразовать растровый шрифт (.FON) в шрифт truetype (.TTF)?

моя программа (win32, Delphi) должна отображать специальные символы в некоторых столбцах таблицы. Для этого я использую специальный шрифт для этих столбцов. Я получил шрифт от моего клиента. Это.Фон Фонт. Он хорошо работает на экране, но у меня часто возникают проблемы, как только я хочу использовать его для печати чего-то.

Я хотел бы преобразовать это .Шрифт FON в шрифт truetype (.TTF), чтобы избежать проблем. Мне все равно, если шрифт не масштабируется хорошо. Я должна выглядеть точно так же, когда используется на экране с тем же размером, что и размер исходного шрифта по умолчанию. Кто-нибудь знает, как это сделать?

(Это не обязательно решение исходного кода. Шрифт не изменится. Этого достаточно, если я найду инструмент для этого)

Edit: идеальным было бы получить шрифт truetype, где каждый пиксель исходного шрифта преобразуется в векторный Черный квадрат (я протестировал, перерисовав несколько символов вручную, он будет работать как я хотеть.)

Edit 2, используемое решение: используя компьютеров + векторизация а затем, делая исправления вручную, я смог получить векторный шрифт, который следует за контуром пикселей растрового шрифта. Этот векторный шрифт масштабируется несколько лучше, чем исходный шрифт, и решает мои проблемы с печатью. Принять сообщение для деталей.

но я все еще интересно, если кто-то знает полностью автоматизированное решение.

10 ответов


использовать компьютеров + векторизация затем внесите некоторые исправления вручную.

сначала интегрируйте Autotrace в Fontforge, см. Автотрейсинг растровых изображений в FontForge. Вот как я это сделал, так как я не смог использовать версию win32 FontForge:

  1. скачать, распаковать и запустить Портативный Ubuntu Tres. Это специальная версия Linux, которая работает под Windows!
  2. выбрать Система- > администрирование - >добавление / удаление приложений, поиск FontForge и его установка (пароль администратора-123456). У меня установлена версия FontForge 20090622.
  3. загрузить autotrace-0.31.1.смола.gz от http://autotrace.sourceforge.net/index.html#download и скопируйте его в свой домашний каталог в портативном Ubuntu.
  4. в портативном Ubuntu выберите Приложения- > аксессуары - > терминал для компиляции и установки 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
    

затем преобразовать шрифт:

  1. запустите FontForge в портативном Ubuntu и откройте.Фон Фонт.
  2. сохраните шрифт как a .Шрифт BDF (загрузка a .Файл FON в качестве фона не работал для меня, поэтому мне пришлось сначала преобразовать шрифт): File - >Generate Fonts и выбрать BDF в качестве формата.
  3. создать новый шрифт и импортировать шрифт BDF в качестве фона шрифта: файл - >импорт и не забудьте выбрать " как Фон."
  4. выберите все символы и запустите автопробег, удерживая клавишу shift, чтобы можно было ввести параметры автопробега. Я использовал следующие параметры, которые улучшили распознавание контура пикселей, но я не нашел идеальные параметры:

    -corner-surround=1 -line-threshold=10
    
  5. исправить персонажа вручную с помощью функции "добавить точку". Активация View - >Show - >почти горизонтальные / вертикальные линии делает работу много облегчающий.
  6. Generate a truetype font: File - >Generate Fonts и выберите truetype в качестве формата.

Я знаю, что этот вопрос старый, но для чего он стоит, я смог легко преобразовать старый .fon, чтобы .ttf с помощью PixFont. Я запустил его как администратор (без установки - исполняемый файл старой школы на месте), и он создал хороший TTF, хотя оригинал .фон пропустил несколько правильных иероглифов.

и, хотя это не бесплатно, в $29 это почти так, особенно по сравнению с очень дорогими коммерческими продуктами.


для тех, кто не хочет компилировать fontforge (для windows), загрузите здесь: http://www.mpetroff.net/software/fontforge-windows/

эта сборка использует potrace вместо autotrace. Лучшие параметры, которые я получил для шрифта, который я конвертировал (vgasys.фон) были:

--turdsize 0 --opttolerance 0 --unit 1 --longcurve --gamma 0 --blacklevel 0 --cleartext

это были еще часы ручной работы, чтобы шрифт выглядел хорошо (путем добавления и удаления точек).


используя FontForge я смог создать соответствующий шрифт truetype, который дает точно такие же символы, как исходный шрифт при использовании в хорошем размере. Может быть, мне все еще нужно настроить некоторые параметры, потому что я использовал свой оригинальный шрифт размером=11. Новый шрифт хорошо работает только при size=10.5, что невозможно использовать в delphi. Шрифт выглядит ужасно при любом другом размере.

  1. загрузить .Фон шрифт в FontForge
  2. Выберите Файл - >Создать Шрифты
  3. выберите " (поддельный) MS bitmap только sfnt (ttf)" в качестве типа, введите имя файла и нажмите "Сохранить".

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

Примечание FontForge: мне не удалось установить версию Windows FontForge (на основе cygwin). Вместо этого я установил Портативный Ubuntu Tres, который является версией linux, которая работает на Windows. Его легко установить: распакуйте файл и запустите exe. Затем выберите System - >Administration - >Add / Remove Applications и найдите FontForge и установите его (пароль администратора-123456). У меня установлена версия FontForge 20090622.


возможно использовать инструмент командной строки SBIT32 ФОМ от Microsoft. Это легко преобразовать .Фон файл в a .BDF файл с помощью компьютеров. Но тогда вам нужно написать файл метрик (.ВСТРЕЧЕННЫЙ.) Я не пробовал, потому что я предполагаю, что я получу truetype-шрифт со встроенным шрифтом растровых изображений, и можно создавать такие шрифты непосредственно с компьютеров (введите "(поддельный) MS bitmap только sfnt (ttf) " в разделе Файл->Создать шрифты).


Я обнаружил, что самый простой способ получить хорошую версию TTF FON-использовать один из бесплатных онлайн-редакторов растровых шрифтов. Вы должны вручную ввести каждый глиф, но процесс намного проще, чем справиться с FontForge. Есть два редактора, о которых я знаю, и они оба производят TTFs, которые отлично работают в Windows и Linux.

BitFontMaker - это проще двух. Мне нравится его чистый интерфейс, но я не использовал его, потому что моноширинные шрифты может иметь только ширину ячеек от 10 до 14 пикселей.

FontStruct требуется регистрация и использует интерфейс Flash. Я смог сделать новые шрифты довольно быстро, как только я привык к интерфейсу. (Это может быть совпадением, но я заметил всплеск спама в учетной записи электронной почты, которую я использовал для регистрации.)

оба редактора устанавливают интервал между строками автоматически. Трюк, чтобы получить интервал, который вы хотите, чтобы добавить высокий пиксель на один символ, а затем использовать редактор векторных шрифтов для удаления это из TTF. (введите light работает хорошо и намного проще в использовании, чем FontForge.)


маловероятно, что вы можете сделать это с помощью простого бесплатного инструмента. http://www.fontlab.com есть инструменты для этого, но они очень дорогие.


согласно характеру продукции BitFonter 3.0 Кажется, что это можно сделать:

"мощное преобразование растровых изображений и растровых шрифтов из и в шрифты типа 1, TrueType и OpenType путем интеграции с Fontlab Studio и TypeTool."

но US $999 немного дорого конвертировать только один шрифт.


Я обнаружил, что ищу эти шрифты для использования с проектом, над которым я работаю. Съежившись при мысли о ручном редактировании всех иероглифов, упомянутых в других ответах, я продолжила поиск. В конце концов я наткнулся на сайт, который имеет оригинальный шрифт, а также некоторые новые .ttf вариантов. Если вам все равно, что некоторые из глифов были переназначены (они все еще присутствуют), это хорошая альтернатива:Oldschool PC шрифты. В качестве дополнительного бонуса для меня они поддерживают расширенные латинские, греческие, кириллические и еврейские скрипты, а также кучу дополнительных символов и символов Юникода.


Я не мог заставить autotrace работать, поэтому я написал скрипт python для трассировки черно-белых изображений в векторные полигоны, по одному для каждого пикселя.

таким образом, с папкой изображений глифа, вы можете преобразовать его в папку svg файлы.

затем в Inkscape union + упростите путь, чтобы очистить каждый глиф. ( может быть выполнимо в командной строке с Inkscape)

наконец импортируйте соответствующий svg в FontForge для каждого глифа.

-> скрипт размещено в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()