Как преобразовать растровый шрифт (.fon) в шрифт TrueType (.ttf)?

StackOverflow https://stackoverflow.com/questions/3750124

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

Использовать FontForge + AutoTrace. Затем сделайте некоторые исправления вручную.

Сначала интегрируйте автотвраща в FontForge, см. AutoTracing Bitmaps в FontForge. Отказ Вот как я это сделал, так как я не смог использовать версию Win32 FontForge:

  1. Скачать, расстевать и начать Портативные Tres Ubuntu. Отказ Это специальная версия Linux, которая работает под Windows!
  2. Выберите систему-> Администрирование-> Добавить / удалить приложения, поиск FONTFORGE и установить его (пароль администратора 123456). Я получил установку FortForge версии 20090622.
  3. Скачать AutoTrace-0.31.1.tar.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 и откройте шрифт .fon.
  2. Сохраните свой шрифт как шрифт .bdf (загрузка файла .fon в качестве фона не работал для меня, поэтому мне пришлось сначала преобразовать шрифт): file-> Создать шрифты и выберите BDF в качестве формата.
  3. Создайте новый шрифт и импортируйте шрифт BDF в качестве фонового шрифта: File-> Import и не забудьте выбрать «Как фоном».
  4. Выберите все символы и запустите AutoTrace, удерживая клавишу Shift, чтобы вы могли ввести параметры для AutoTrace. Я использовал следующие параметры, что улучшило распознавание наброски пикселей, но я не нашел идеальные параметры:

    -corner-surround=1 -line-threshold=10
    
  5. Исправьте символы вручную, используя в основном функцию «Добавить кривую точку». Активация просмотра-> Show-> почти горизонтальные / вертикальные линии делают работу намного проще.
  6. Создайте шрифт TrueType: файл-> Создать шрифты и выберите TrueType в качестве формата.

Другие советы

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

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

Для тех, которые не хотят скомпилировать 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

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

С использованием FontForge Я смог сгенерировать соответствующий шрифт TrueType, который дает точно такие же символы, как оригинальный шрифт при использовании при хорошем размере. Может быть, мне все еще нужно настроить некоторые варианты, потому что я использовал свой оригинальный шрифт по размеру = 11. Новый шрифт работает хорошо только при размере = 10,5, что невозможно использовать в Delphi. Шрифт выглядит действительно ужасно у каждого другого размера.

  1. Загрузить шрифт .fon в fortforge
  2. Выберите файл-> Создать шрифты
  3. Выберите «(подделанный) MS Bitmap только SFNT (TTF)« Введите тип, нанять имя файла и нажмите «Сохранить».

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

Примечание о FontForge: Мне не удалось установить версию Windows FontForge (на основе Cygwin). Вместо этого я установил Портативные Tres Ubuntu, который является версией Linux, которая работает на Windows. Это легко установить: расстегивайте файл и запустите EXE. Затем выберите «Системное»> «Администрирование»> «Установка / удаление приложений» и «Добавить /» приложения и искать FontForge и установить его (пароль администратора 123456). Я получил установку FortForge версии 20090622.

Возможность будет использовать инструмент командной строки SBIT32 FOM Microsoft.. Отказ Легко преобразовать файл .fon в файл .bdf, используя FontForge. Отказ Но тогда вам нужно написать файл метрик (.met). Я не пробовал, потому что я полагаю, что я получаю шрифт TrueType со встроенным шрифтом растровых изображений, и можно сгенерировать такие шрифты напрямую с FontForge (Тип «(подделка) MS Bitmap только SFNT (TTF)« Под файл-> генерирует шрифты).

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

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

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

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

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

Согласно описанию продукта Bitfonter 3.0 кажется, умеет сделать это:

"Мощное преобразование растровых изображений и растровых шрифтов из типа 1, TrueType и Opentype шрифты через интеграцию со студией FontLab и TypeTool."

Но 999 долларов США немного дорого конвертировать только один шрифт.

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

Я не мог получить 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()

Мне пришлось пройти много хлопот, чтобы найти решение, которое работало для меня.

AutoTrace, кажется, производит Pixel Perfect Output, если вход масштабируется, от моего опыта масштабируется не менее 8x отлично.

Масштабирование входных данных преодолено благодаря закрытому программному обеспечению.

Битфон может открывать шрифты BDF (которые поддерживают Unicode), и он может масштабироваться. Проблема с демонстрацией демонстрации заключается в том, что половина глифов «повреждена» при экспорте (пиксели случайным образом удалены), и это делает AutoTrace снова производить нежелательный выход. Но я заметил, что есть шаблон, к которому персонажи «испорчены»: первый и второй глифы повреждены, третий и четвертый нет, пятый и шестой коррумпирован и так далее. Итак, я сделал дополнительный файл BDF, снова масштабирующий его, но затем удаляя первые два глифа. Затем сочетание этих двух можно сделать в FontFolge: откройте оба этих вывода файлов, «reencode» в «кодировании» в «Glyph Order», выберите все в OUTPORE2 и COPY, в выходе1 щелкните третий глиф и нажмите Ctrl + Shift + Внимание Это будет объединять как выходные файлы, так и сделать все символы, масштабированные идеально беззаконным, за исключением первых двух глифов, которые можно сделать вручную. Сохранить результат.

Выполните «AutoTrace» на этом масштабированном выходе. Затем, по всем глифам, элементам преобразованиях преобразуют, затем используйте следующие параметры: Происхождение: Glyph Происхождение, масштаб равномерно ... Обратность того, что вы масштабировали BDF раньше (в случае 8x масштабирования, это 12,5%).

Существует больше очков, чем необходимо, это может быть разрешено с использованием элемента упрощение упрощение, это упростит очертания. В этом конкретном случае отложений изготовлены только горизонтальные и вертикальные линии, эта операция должна быть без потерь.

Затем, после всего этого, я заметил, что глифы, казалось бы, не имеют информации Unicode. Откройте, какой бы шрифт имел именно символы полученного шрифта, используйте кодировку reencode ISO 10646-1 (Unicode, BMP) на этом шрифте, затем используйте компактные. Затем скопируйте все символы из шрифта, который имеет все правильные очертания на шрифт, который имеет все правильные кодировки Unicode.

Если вы не можете следовать за шагом, дайте мне знать, что происходит. Это действительно преодолено, и это была тонна хлопот, пытаясь использовать и объединить эффекты каждого инструмента, который я мог найти, но я нашел решение. Он автоматизирован, что облегчает шрифты с множеством символов, чем перерисование всех персонажей вручную. Это должно помочь всем, кто привлекает битовое изображение Glyphs и имеет действительный файл шрифта Bitmap, но он еще не может использовать его.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top