Подтвердить что ты не робот

Создание файла шрифта Truetype с помощью javafx

У меня есть холст. Он просит пользователя нарисовать символ из A-Z, a-z или 0-9. как только пользователь рисует символ, скажем, A, текущий объект холста сохраняется в arraylist холстов. и появляется еще одно пустое полотно, которое просит пользователя нарисовать B. и т.д.

Программы работают нормально. Но я хочу создать файл .ttf со всеми принятыми символами.

У меня есть кнопка ниже последнего отображаемого холста, который при нажатии будет извлекать все символы из массива холстов и создавать из него файл .ttf. Но как?

4b9b3361

Ответ 1

Первое решение:

Вы можете использовать java.awt.Font, это класс Java, используемый для управления и создания Шрифты, вы можете использовать конструктор Font (String name, int style, int size), чтобы создать свой собственный шрифт:

Шрифт (имя строки, int style, int size):

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

Например, если имя лица "Arial Bold" указано в стиле Font.ITALIC, система шрифтов ищет лицо в семье "Arial" который выделен жирным шрифтом и курсивом, и может ассоциировать экземпляр шрифта с физическое лицо шрифта "Arial Bold Italic". Аргумент стиля слит с указанным стилем лица, не добавленным или вычитаемым. Это означает, указание смелого лица и смелый стиль не удваивают шрифт, а также указание смелого лица и простого стиля не уменьшает шрифт.

Параметры:

name - имя шрифта. Это может быть имя лица шрифта или имя семейства шрифтов и может представлять собой либо логический шрифт, либо физический шрифт, найденный в этой GraphicsEnvironment. Фамилии для логическими шрифтами являются: Dialog, DialogInput, Monospaced, Serif или Без засечек. Для всех этих имен существуют предопределенные строковые константы, например, DIALOG. Если имя равно null, логическое имя шрифта нового Шрифт, возвращаемый getName(), устанавливается на имя "По умолчанию".

стиль - константа стиля для шрифта Аргумент style является целым числом битовая маска, которая может быть PLAIN или побитовое соединение BOLD и/или ITALIC (например, ITALIC или BOLD | ITALIC). Если аргумент стиля не соответствовать одному из ожидаемых целочисленных битмаксов, тогда стиль установлен к PLAIN.

size - размер точки Fon

И как вы можете видеть, это позволяет создавать новые шрифты в зависимости от существующих шрифтов, вы также можете изменить стиль и размер.

Это учебное пособие, которое вы можете выполнить.


Второе решение:

Как указано в комментариях, вы также можете использовать библиотеку Fontastic, которая кажется отличным инструментом для создания новых шрифтов, позволяет создавать шрифты на основе данных, датчиков, живых каналов или любого другого алгоритма или манипулировать существующими шрифтами, чтобы создать свою собственную версию.

Это основные шаги, необходимые для того, чтобы показать вам, как это работает. Для полной справки см. Documentation.

Как создать новый объект Fontastic:

Fontastic f = new Fontastic(this, "ExampleFont");  // Create a new Fontastic object

Как установить дополнительные свойства шрифта:

f.setAuthor("Andreas Koller"); 

Как создать глиф для символа A со случайной формой из четырех точек:

PVector[] points = new PVector[4];              // Define a PVector array containing the points of the shape
points[0] = new PVector(0, 0);                  // Start at bottom left
points[1] = new PVector(random(512), 0);        // The normal width is 512, the normal height 1024
points[2] = new PVector(random(512), random(1024)); // y coordinates are from bottom to top!
points[3] = new PVector(0, random(1024));

f.addGlyph('A').addContour(points);

Как сгенерировать файл шрифта TrueType:

f.buildFont();  

Как очистить после:

f.cleanup();

Вы можете увидеть свои примеры.


Вывод:

Но в двух случаях вы не сможете создавать шрифты из рукописных отсканированных изображений, Fantastic не позволит вам создавать шрифт из изображений, но он использует векторную графику для создания шрифтов, поэтому в этом случае решение будет:

  • Чтобы использовать другой инструмент для преобразования ваших изображений в векторы ( Vector Магия, Inkscape, myScriptFont.com)

  • Затем создайте Font с помощью сгенерированного vectors.

Ответ 2

Я использовал эту библиотеку: fontastic font maker

И вот как это работает:

Как создать новый объект Fontastic:

Fontastic f = new Fontastic(this, "ExampleFont");  // Create a new Fontastic object

Как установить дополнительные свойства шрифта:

f.setAuthor("Andreas Koller");                  // Set author name - will be saved in TTF file too

Как создать глиф для символа A со случайной формой из четырех точек (так что здесь будут точки (или нормализованные точки), которые вы собрали перед пользователем):

PVector[] points = new PVector[4];              // Define a PVector array containing the points of the shape
points[0] = new PVector(0, 0);                  // Start at bottom left
points[1] = new PVector(random(512), 0);        // The normal width is 512, the normal height 1024
points[2] = new PVector(random(512), random(1024)); // y coordinates are from bottom to top!
points[3] = new PVector(0, random(1024));

f.addGlyph('A').addContour(points);             // Assign contour to character A

Как сгенерировать файл шрифта TrueType:

f.buildFont();                                  // Build the font resulting in .ttf and .woff files
                                                // and a HTML template to preview the WOFF