textflow style setstyle font custom color java fonts javafx-8 true-type-fonts

setstyle - style label javafx



Crear un archivo de fuente Truetype con javafx (2)

Tengo un lienzo. Le pide al usuario que dibuje un carácter de AZ, az o 0-9. una vez que el usuario dibuja un personaje, digamos A, el objeto de lienzo actual se guarda en una lista de capas 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, al hacer clic, extrae todos los caracteres de la lista de capas de lienzos y crea un archivo .ttf partir de él. ¿Pero cómo?


Primera solución:

Puede usar java.awt.Font , es una clase de Java utilizada para administrar y crear fuentes , puede usar su constructor de fuente (String name, int style, int size) para crear su fuente personalizada:

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

Crea una nueva fuente a partir del nombre, el estilo y el tamaño de punto especificados. El nombre de la fuente puede ser el nombre de una fuente o el apellido de una fuente. Se usa junto con el estilo para encontrar una cara de fuente apropiada. Cuando se especifica un nombre de familia de fuente, el argumento de estilo se usa para seleccionar la cara más apropiada de la familia. Cuando se especifica un nombre de tipo de letra, el estilo de la cara y el argumento de estilo se combinan para ubicar la mejor fuente coincidente de la misma familia.

Por ejemplo, si el nombre de la cara "Arial Bold" se especifica con el estilo Font.ITALIC, el sistema de fuentes busca una cara en la familia "Arial" que sea negrita y cursiva, y puede asociar la instancia de la fuente con la cara de la fuente física "Arial Bold Itálico". El argumento de estilo se fusiona con el estilo de la cara especificada, no se agrega ni se resta. Esto significa que especificar una negrita y un estilo en negrita no duplica la fuente, y especificar una negrita y un estilo sencillo no aligera la fuente.

Parámetros:

nombre - el nombre de la fuente. Puede ser el nombre de una fuente o el nombre de una familia de fuentes, y puede representar una fuente lógica o una fuente física que se encuentra en este GraphicsEnvironment. Los nombres de familia para fuentes lógicas son: Dialog, DialogInput, Monospaced, Serif o SansSerif. Las constantes de cadena predefinidas existen para todos estos nombres, por ejemplo, DIALOG. Si el nombre es nulo, el nombre de la fuente lógica de la nueva fuente que devuelve getName () se establece con el nombre "Predeterminado".

style - la constante de estilo para la fuente El argumento de estilo es una máscara de bits entera que puede ser PLAIN, o una unión bit a bit de BOLD y / o ITALIC (por ejemplo, ITALIC o BOLD | ITALIC). Si el argumento de estilo no se ajusta a una de las máscaras de bits enteras esperadas, entonces el estilo se establece en PLAIN.

tamaño : el tamaño del punto de 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.

Este es un tutorial que puedes seguir.

Segunda solución:

Como se indica en los comentarios, también puede utilizar Fontastic Library, que parece ser una gran herramienta para crear nuevas fuentes. Le permite crear fuentes basadas en datos, sensores, transmisiones en vivo o cualquier otro algoritmo, o manipular las fuentes existentes para crear tu propia versión

Estos son los pasos básicos necesarios para mostrarle cómo funciona. Para una referencia completa, vea la Documentation .

Cómo crear un nuevo objeto Fontastic:

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

Cómo establecer más propiedades de fuente:

f.setAuthor("Andreas Koller");

Cómo crear un glifo para el personaje 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 fuentes 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 imágenes escaneadas a mano, Fantastic no le permitirá crear una fuente a partir de imágenes, pero usa gráficos vectoriales para crear fuentes, por lo que en este caso la solución sería:

  1. Para usar otra herramienta para convertir sus imágenes en vectores ( Vector Magic , Inkscape , myscriptfont )

  2. Luego crea tu Font usando los vectors generados.


He usado esta biblioteca: Fontastic

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 más propiedades de fuente:

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

Cómo crear un glifo para el personaje 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 fuentes TrueType:

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