2014-10-13 15 views
33

Mam płótno. Prosi użytkownika o narysowanie postaci z A-Z, a-z lub 0-9. gdy użytkownik narysuje znak, na przykład A, bieżący obiekt canvas zostanie zapisany na tablicy obrazów na płótnie. i pojawia się kolejne puste płótno, które prosi użytkownika o rysowanie B. i tak dalej.Tworzenie pliku czcionki Truetype z javafx

Programy działają poprawnie. Ale chcę utworzyć plik .ttf ze wszystkimi zaakceptowanymi znakami narysowanymi.

Mam przycisk pod ostatnio wyświetlanym obszarem, który po kliknięciu wypakuje wszystkie znaki z listy tabel kanonów i utworzy z nich plik .ttf. Ale jak?

+8

Możesz rzucić okiem na [Fontastic] (http://code.andreaskoller.com/libraries/fontastic/), biblioteki Java do tworzenia plików czcionek (w tym czcionki TrueType w plikach .ttf) . Fontastic korzysta z biblioteki [doubletype] (http://sourceforge.net/projects/doubletype/) do tworzenia czcionek typu truetype. Nie jestem szczególnie zaznajomiony z tymi bibliotekami ... –

+0

Czy potrafi wykryć moje własne pismo z kartki papieru, w której napisałem wszystkie postacie w formacie tabelarycznym? –

+1

Celem tej biblioteki jest utworzenie czcionki od zera (poprzez zdefiniowanie dowolnej grafiki wektorowej) lub zmodyfikowanie innej czcionki (która jest już w formacie wektorowym). Nie zamieni obrazu bitmapowego (takiego jak zeskanowany arkusz papieru) na czcionki wektorowe. Wiem, że niektóre edytory grafiki wektorowej (takie jak Inkscape) oferują narzędzia do konwersji bitmap do wektorów, a niektóre strony internetowe (takie jak darmowa [myscriptfont] (http://www.myscriptfont.com/)) umożliwiają konwertowanie pisma ręcznego na czcionki TrueType. , więc na pewno jest to wykonalne - ale nie znam żadnego takiego narzędzia dostępnego jako biblioteka Java. –

Odpowiedz

2

pierwsze rozwiązanie:

można użyć java.awt.Font, to klasa Java używany do zarządzania i tworzenia Czcionki, można użyć jej Font(String name, int style, int size) konstruktor, aby stworzyć swój własny Font:

Font (String name, int, int size styl):

tworzy nową czcionkę z określoną nazwą, styl i wielkość w punktach. Nazwa czcionki może być nazwą czcionki lub nazwą rodziny czcionek. Jest to używane razem ze stylem, aby znaleźć odpowiednią czcionkę. Gdy podana jest nazwa rodziny czcionek , argument stylu jest używany do wybierania najbardziej odpowiedniej twarzy z rodziny. Gdy określona nazwa czcionki jest określona jako , styl twarzy i argument stylu są scalane do , aby znaleźć najlepiej pasującą czcionkę z tej samej rodziny.

Na przykład jeśli nazwa twarz „Arial Bold” jest określony w stylu Font.ITALIC system czcionka wygląda na twarzy w „Arial” rodziny który jest pogrubienie i kursywa, a może powiązać wystąpienie czcionki z Fizyczna czcionka "Arial Bold Italic". Argument stylu jest scalony z określonym stylem ściany, nie jest dodawany ani odejmowany. Oznacza to, że określając pogrubioną czcionkę i pogrubioną czcionkę, nie podwaja podwójnie czcionki , a określenie pogrubionej twarzy i zwykłego stylu nie rozjaśnia czcionki.

Parametry:

nazwa - nazwa czcionki. Może to być nazwa czcionki lub nazwa rodziny czcionek i może reprezentować czcionkę logiczną lub fizyczną czcionkę znalezioną w tym środowisku graficznym. Nazwy rodzin dla czcionek logicznych: Dialog, DialogInput, Monospaced, Serif lub SansSerif. Wstępnie zdefiniowane stałe ciągów istnieją dla wszystkich tych nazw, na przykład: DIALOG. Jeśli nazwa ma wartość null, nazwa logicznej czcionki nowej czcionki zwróconej przez funkcję getName() jest ustawiona na nazwę "Default".

styl - styl stała dla czcionek styl argument jest całkowitą bitową, która może mieć zwykły, albo związek bitowe pogrubienia i/lub kursywą (na przykład, pochylony lub pogrubionych | kursywa). Jeśli argument stylu nie jest zgodny z jedną z oczekiwanych całkowitych masek bitowych, wówczas styl ustawiany jest na na ZWYKŁY.

rozmiar - wielkość punktem Fon

I jak widać to pozwala tworzyć nowe czcionki w zależności od istniejących czcionek, można również zmienić styl i rozmiar.

To jest a Tutorial, którą można śledzić.


drugie rozwiązanie:

Jak podano w komentarzach, można również skorzystać z biblioteki Fontastic, który wydaje się być doskonałym narzędziem do tworzenia nowych czcionek, to pozwala na wykonywanie czcionek na podstawie danych, czujników, transmisji na żywo lub dowolnego innego algorytmu lub manipuluj istniejącymi czcionkami, aby utworzyć własną wersję.

Oto podstawowe kroki potrzebne do pokazania, jak to działa. Aby uzyskać pełne informacje, patrz Documentation.

Jak utworzyć nowy Fontastic obiektu:

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

Jak ustawić dalsze właściwości czcionki:

f.setAuthor("Andreas Koller"); 

Jak stworzyć glif dla charakterem z losowym kształcie czterech punktach:

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

Jak wygenerować plik czcionki TrueType:

f.buildFont(); 

Jak oczyścić potem:

f.cleanup(); 

Widać their examples.


Wniosek:

Ale w obu przypadkach nie będzie w stanie stworzyć czcionki z odręcznych skanowanych obrazów, Fantastic nie pozwolą Ci stworzyć czcionkę z obrazami ale używa grafiki wektorowej do tworzenia czcionek, więc w tym przypadku rozwiązaniem byłoby:

  1. aby użyć innego narzędzia do konwersji obrazów do wektorów (Vector Magic, Inkscape, myScriptFont.com)

  2. następnie utwórz Font pomocą wygenerowanego vectors.

4

Użyłem tej biblioteki: fontastic font maker

I to jest, jak to działa:

Jak utworzyć nowy Fontastic obiektu:

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

Jak ustawić dalsze właściwości czcionki:

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

Tworzenie glifu f lub postać A o losowej kształcie czterech punktów (więc tutaj byłoby punkty (lub znormalizowane punkty), które zostały zebrane wcześniej od użytkownika):

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 

Jak wygenerować plik czcionki TrueType:

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