Как преобразовать растровый шрифт (.FON) в шрифт truetype (.TTF)?
моя программа (win32, Delphi) должна отображать специальные символы в некоторых столбцах таблицы. Для этого я использую специальный шрифт для этих столбцов. Я получил шрифт от моего клиента. Это.Фон Фонт. Он хорошо работает на экране, но у меня часто возникают проблемы, как только я хочу использовать его для печати чего-то.
Я хотел бы преобразовать это .Шрифт FON в шрифт truetype (.TTF), чтобы избежать проблем. Мне все равно, если шрифт не масштабируется хорошо. Я должна выглядеть точно так же, когда используется на экране с тем же размером, что и размер исходного шрифта по умолчанию. Кто-нибудь знает, как это сделать?
(Это не обязательно решение исходного кода. Шрифт не изменится. Этого достаточно, если я найду инструмент для этого)
Edit: идеальным было бы получить шрифт truetype, где каждый пиксель исходного шрифта преобразуется в векторный Черный квадрат (я протестировал, перерисовав несколько символов вручную, он будет работать как я хотеть.)
Edit 2, используемое решение: используя компьютеров + векторизация а затем, делая исправления вручную, я смог получить векторный шрифт, который следует за контуром пикселей растрового шрифта. Этот векторный шрифт масштабируется несколько лучше, чем исходный шрифт, и решает мои проблемы с печатью. Принять сообщение для деталей.
но я все еще интересно, если кто-то знает полностью автоматизированное решение.
10 ответов
использовать компьютеров + векторизация затем внесите некоторые исправления вручную.
сначала интегрируйте Autotrace в Fontforge, см. Автотрейсинг растровых изображений в FontForge. Вот как я это сделал, так как я не смог использовать версию win32 FontForge:
- скачать, распаковать и запустить Портативный Ubuntu Tres. Это специальная версия Linux, которая работает под Windows!
- выбрать Система- > администрирование - >добавление / удаление приложений, поиск FontForge и его установка (пароль администратора-123456). У меня установлена версия FontForge 20090622.
- загрузить autotrace-0.31.1.смола.gz от http://autotrace.sourceforge.net/index.html#download и скопируйте его в свой домашний каталог в портативном Ubuntu.
-
в портативном 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
затем преобразовать шрифт:
- запустите FontForge в портативном Ubuntu и откройте.Фон Фонт.
- сохраните шрифт как a .Шрифт BDF (загрузка a .Файл FON в качестве фона не работал для меня, поэтому мне пришлось сначала преобразовать шрифт): File - >Generate Fonts и выбрать BDF в качестве формата.
- создать новый шрифт и импортировать шрифт BDF в качестве фона шрифта: файл - >импорт и не забудьте выбрать " как Фон."
-
выберите все символы и запустите автопробег, удерживая клавишу shift, чтобы можно было ввести параметры автопробега. Я использовал следующие параметры, которые улучшили распознавание контура пикселей, но я не нашел идеальные параметры:
-corner-surround=1 -line-threshold=10
- исправить персонажа вручную с помощью функции "добавить точку". Активация View - >Show - >почти горизонтальные / вертикальные линии делает работу много облегчающий.
- 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. Шрифт выглядит ужасно при любом другом размере.
- загрузить .Фон шрифт в FontForge
- Выберите Файл - >Создать Шрифты
- выберите " (поддельный) 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()