2014-10-13 15 views
33

Tôi có canvas. Nó yêu cầu người dùng vẽ một ký tự từ A-Z, a-z hoặc 0-9. khi người dùng vẽ một ký tự nói A, đối tượng canvas hiện tại được lưu trong danh sách mảng của canvas. và một canvas trống bật lên yêu cầu người dùng vẽ B. và cứ thế.Tạo tệp Phông chữ Truetype với javafx

Chương trình hoạt động tốt. Nhưng tôi muốn tạo một tập tin .ttf với tất cả các ký tự được chấp nhận.

Tôi có nút bên dưới canvas được hiển thị cuối cùng khi được nhấp vào, sẽ trích xuất tất cả các ký tự từ danh sách mảng khung ảnh và tạo tệp .ttf từ đó. Nhưng bằng cách nào?

+8

Bạn có thể muốn xem [Fontastic] (http://code.andreaskoller.com/libraries/fontastic/), thư viện Java để tạo tệp phông chữ (bao gồm phông chữ truetype trong tệp .ttf) . Fontastic tự sử dụng thư viện [doubletype] (http://sourceforge.net/projects/doubletype/) để tạo phông chữ truetype. Tôi không đặc biệt quen thuộc với các thư viện đó ... –

+0

Nó có thể phát hiện chữ viết tay của riêng tôi từ một mảnh giấy mà tôi đã viết tất cả các ký tự trong một định dạng bảng? –

+1

Điểm của thư viện này là tạo phông chữ từ đầu (bằng cách xác định bất kỳ đồ họa vector nào bạn muốn) hoặc bằng cách sửa đổi phông chữ khác (đã có định dạng vectơ). Nó sẽ không chuyển đổi một hình ảnh bitmap (như tờ giấy đã quét của bạn) thành phông chữ vectơ. Tôi biết rằng một số trình soạn thảo đồ họa vector (như Inkscape) cung cấp các công cụ để giúp chuyển đổi bitmap thành vectơ và một số trang web (chẳng hạn như [myscriptfont] (http://www.myscriptfont.com/) miễn phí cung cấp chuyển đổi chữ viết tay thành phông chữ truetype , do đó, nó chắc chắn có thể thực hiện được - nhưng tôi không biết bất kỳ công cụ nào có sẵn như một thư viện Java. –

Trả lời

2

giải pháp thứ nhất:

bạn có thể sử dụng java.awt.Font, nó là một lớp Java sử dụng để quản lý và tạo Fonts, bạn có thể sử dụng nó Font(String name, int style, int size) constructor để tạo phông chữ của bạn tùy chỉnh:

Font (tên String, int style, int size):

Tạo Font mới từ tên, phong cách và điểm kích thước quy định. Tên phông chữ có thể là tên phông chữ hoặc tên họ phông chữ. Đó là được sử dụng cùng với phong cách để tìm khuôn mặt phông chữ phù hợp. Khi một tên họ phông chữ được chỉ định, đối số kiểu được sử dụng để chọn khuôn mặt thích hợp nhất từ ​​gia đình. Khi tên phông chữ là được chỉ định, kiểu khuôn mặt và đối số kiểu được hợp nhất thành tìm phông chữ phù hợp nhất từ ​​cùng một gia đình.

Ví dụ: nếu tên khuôn mặt "Arial Bold" được chỉ định bằng kiểu Font.ITALIC, hệ thống phông chữ sẽ tìm khuôn mặt trong họ "Arial" đậm và nghiêng, và có thể liên kết thể hiện phông chữ với phông chữ vật lý "Arial Bold Italic". Đối số kiểu được hợp nhất với kiểu khuôn mặt được chỉ định, không được cộng hoặc trừ. Điều này có nghĩa là, chỉ định khuôn mặt đậm và kiểu in đậm không làm tăng gấp đôi văn bản và chỉ định khuôn mặt đậm và kiểu đồng bằng không làm nhạt phông chữ .

Tham số:

tên - tên phông chữ. Đây có thể là tên phông chữ hoặc tên họ phông chữ và có thể đại diện cho phông chữ hợp lý hoặc phông chữ vật lý được tìm thấy trong GraphicsEnvironment này. Họ của các phông chữ hợp lý là: Hộp thoại, DialogInput, Monospaced, Serif hoặc SansSerif. Các hằng số chuỗi được xác định trước tồn tại cho tất cả các tên này, ví dụ: , DIALOG. Nếu tên là null, tên phông chữ logic của phông chữ mới như được trả về bởi getName() được đặt thành tên "Mặc định".

phong cách - phong cách liên tục cho Font Đối số phong cách là một số nguyên bitmask mà bạn có thể PLAIN, hoặc một liên minh Bitwise của BOLD và/hoặc in nghiêng (ví dụ, nghiêng hoặc BOLD | Italic). Nếu đối số kiểu không phù hợp với một trong các bitmask số nguyên mong muốn thì kiểu được đặt thành PLAIN.

kích thước - kích thước điểm của Fon

Và như bạn có thể nhìn thấy nó cho phép bạn tạo Fonts mới tùy thuộc vào phông chữ hiện tại, bạn cũng có thể thay đổi phong cách và kích thước.

Đây là a Tutorial mà bạn có thể theo dõi.


Second Giải pháp:

Như đã nêu trong các ý kiến, bạn cũng có thể sử dụng Thư viện Fontastic mà dường như là một công cụ tuyệt vời để tạo Fonts mới, Nó cho phép bạn làm cho phông chữ dựa trên dữ liệu, cảm biến, nguồn cấp dữ liệu trực tiếp hoặc bất kỳ thuật toán nào khác hoặc thao tác các phông chữ hiện có để tạo phiên bản của riêng bạn.

Đây là các bước cơ bản cần thiết để cho bạn biết cách hoạt động của nó. Để tham khảo đầy đủ, hãy xem Documentation.

Làm thế nào để tạo ra một đối tượng Fontastic mới:

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

Làm thế nào để thiết lập thêm các thuộc tính font:

f.setAuthor("Andreas Koller"); 

Làm thế nào để tạo ra một hình tượng cho nhân vật A với một hình dạng ngẫu nhiên của bốn điểm:

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ách tạo tệp phông chữ TrueType:

f.buildFont(); 

Làm thế nào để làm sạch sau:

f.cleanup(); 

Bạn có thể thấy their examples.


Kết luận:

Nhưng trong hai trường hợp, bạn sẽ không thể tạo Fonts từ hình ảnh quét viết tay, Fantastic sẽ không cho phép bạn tạo ra một chữ từ hình ảnh nhưng nó sử dụng đồ họa vector để tạo Fonts, vì vậy trong trường hợp này là giải pháp sẽ là:

  1. để sử dụng một công cụ khác để chuyển đổi hình ảnh của bạn để vectơ (Vector Magic, Inkscape, myScriptFont.com)

  2. Sau đó tạo của bạn bằng cách sử dụng Font tạo vectors.

4

Tôi đã sử dụng thư viện này: fontastic font maker

Và đó là cách hoạt động:

Làm thế nào để tạo ra một đối tượng Fontastic mới:

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

Làm thế nào để thiết lập các thuộc tính font thêm:

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

Cách tạo glyph f hoặc các nhân vật A với một hình dạng ngẫu nhiên của bốn điểm (vì vậy đây sẽ là điểm (hoặc điểm bình thường), mà bạn đã thu thập được trước khi từ người sử dụng):

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 

Làm thế nào để tạo ra các file font TrueType:

f.buildFont();         // Build the font resulting in .ttf and .woff files 
               // and a HTML template to preview the WOFF 
Các vấn đề liên quan