Crear un archivo de fuente Truetype con javafx


Tengo un lienzo. Le pide al usuario que dibuje un carácter de A-Z, a-z o 0-9. una vez que el usuario dibuja un carácter, por ejemplo, A, el objeto canvas actual se guarda en una arraylist de lienzos. y aparece otro lienzo en blanco que le pide al usuario que dibuje B. y así sucesivamente.

Los programas funcionan bien. Pero quiero crear un archivo .ttf con todos los caracteres aceptados dibujados.

Tengo un botón debajo del último lienzo que se muestra que cuando se hace clic, extraerá todos los caracteres de la lista de arraylist de crea un archivo .ttf a partir de él. ¿Pero cómo?

Author: Shayan Ghosh, 2014-10-13

2 answers

Primera Solución:

Puede utilizar el java.awt.Fuente, es una clase Java utilizada para administrar y crear Fuentes , puede usar su constructor Fuente(Nombre de cadena, estilo int, tamaño int) para crear su fuente personalizada:

Fuente (Nombre de cadena, estilo int, tamaño int):

Crea una nueva Fuente a partir del nombre, estilo y tamaño de punto especificados. El nombre de la fuente puede ser un nombre de fuente o un nombre de familia de fuentes. Es se usa junto con el estilo para encontrar una fuente adecuada. Cuando un se especifica el nombre de la familia de fuentes, el argumento de estilo se utiliza para seleccionar la cara más apropiada de la familia. Cuando un nombre de fuente es especificado, el estilo de la cara y el argumento de estilo se combinan para localice la mejor fuente coincidente de la misma familia.

Por ejemplo, si el nombre de la cara "Arial Bold" se especifica con estilo Letra.CURSIVA, el sistema de fuentes busca una cara en la familia" Arial" eso es audaz y cursiva, y puede asociar la instancia de fuente con el font face "Arial Bold Italic". El argumento style se fusiona con el estilo de la cara especificado, no añadido ni restado. Esto significa, especificar una cara en negrita y un estilo en negrita no envalentona el fuente, y especificar una cara en negrita y un estilo llano no aligerar letra.

Parámetros:

name - el nombre de la fuente. Esto puede ser un nombre de fuente o un nombre de familia de fuentes, y puede representar una fuente lógica o un fuente física que se encuentra en este entorno gráfico. Los apellidos de las fuentes lógicas son: Dialog, DialogInput, Monospaced, Serif, or SansSerif. Existen constantes de cadena predefinidas para todos estos nombres, por ejemplo, DIÁLOGO. Si name es null, el nombre lógico de la fuente La fuente devuelta por getName () se establece en el nombre "Default".

estilo - la constante de estilo para la Fuente El argumento de estilo es un entero máscara de bits eso puede ser SIMPLE, o una unión de NEGRITA y / o CURSIVA (por ejemplo, CURSIVA o NEGRITA / CURSIVA). Si el argumento style no se ajusta a uno de los bitmasks de enteros esperados y luego se establece el estilo al LLANO.

size - el tamaño de punto del Fon

Y como puede ver, le permite crear nuevas fuentes dependiendo de las fuentes existentes, también puede cambiar el estilo y el tamaño.

Es un Tutorial que puede seguir.


Segunda Solución:

Como se indica en los comentarios, también puede utilizar el Fontastic Biblioteca que parece ser una gran herramienta para la creación de nuevas fuentes, Que le permite hacer fuentes basadas en datos, sensores, feeds en vivo, o cualquier otro algoritmo, o manipular las fuentes existentes para crear su propia versión.

Estos son los pasos básicos necesarios para mostrarle cómo funciona. Para una referencia completa, véase la documentación .

Cómo para crear un nuevo objeto Fontastic:

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

Cómo establecer otras propiedades de la fuente:

f.setAuthor("Andreas Koller"); 

Cómo crear un glifo para el carácter A con una forma aleatoria de cuatro puntos:

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);

Cómo generar el archivo de fuente TrueType:

f.buildFont();  

Cómo limpiar después:

f.cleanup();

Puedes ver sus ejemplos.


Conclusión:

Pero en los dos casos no podrá crear fuentes a partir de escritas a mano imágenes escaneadas, Fantastic no le permitirá crear una Fuente a partir de imágenes, pero utiliza gráficos vectoriales para crear Fuentes, por lo que en este caso la solución sería:

  1. Para usar otra herramienta para convertir tus imágenes a vectores (Vector La magia, Inkscape, myScriptFont.com)

  2. Luego crea tu Font usando el vectors generado.

 3
Author: chŝdk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-24 10:40:30

He utilizado esta biblioteca: fontastic font maker

Y así es como funciona:

Cómo crear un nuevo objeto Fontastic:

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

Cómo establecer otras propiedades de la fuente:

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

Cómo crear un glifo para el carácter A con una forma aleatoria de cuatro puntos(así que aquí estarían los puntos (o puntos normalizados), que has reunido antes del usuario):

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

Cómo generar el archivo de fuente TrueType:

f.buildFont();                                  // Build the font resulting in .ttf and .woff files
                                                // and a HTML template to preview the WOFF
 4
Author: Oleksii Kyslytsyn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-24 06:52:16