使用javafx创建Truetype字体文件

Adi*_*ngh 33 java fonts truetype javafx-8

我有一块帆布.它要求用户从AZ,az或0-9中绘制一个字符.一旦用户绘制了一个字符A,则当前画布对象将保存在画布的arraylist中.弹出另一个空白画布,要求用户绘制B.等等.

程序运行正常.但我想创建一个.ttf包含所有可接受字符的文件.

我在最后显示的画布下方有一个按钮,当点击它时,将从画布的arraylist中提取所有字符并从中创建一个.ttf文件.但是怎么样?

cнŝ*_*ŝdk 3

第一个解决方案:

您可以使用java.awt.Font,它是一个用于管理和创建Fonts 的Java 类,您可以使用其Font(String name, int style, int size)构造函数来创建您的自定义字体:

字体(字符串名称、int 样式、int 大小):

根据指定的名称、样式和磅值创建新字体。字体名称可以是字体名称或字体系列名称。它与样式一起使用来找到合适的字体。当指定字体系列名称时,样式参数用于从系列中选择最合适的字体。当指定字体名称时,字体的样式和样式参数将被合并,以从同一系列中找到最匹配的字体。

例如,如果使用样式 Font.ITALIC 指定字体名称“Arial Bold”,则字体系统会在“Arial”系列中查找粗体和斜体的字体,并且可能将字体实例与物理字体“Arial Bold”相关联。斜体”。style 参数与指定面的样式合并,而不是添加或减去。这意味着,指定粗体和粗体样式不会使字体加倍粗体,并且指定粗体和普通样式不会使字体变亮。

参数:

名称- 字体名称。这可以是字体名称或字体系列名称,并且可以表示在此 GraphicsEnvironment 中找到的逻辑字体或物理字体。逻辑字体的系列名称为:Dialog、DialogInput、Monospaced、Serif 或 SansSerif。所有这些名称都存在预定义的字符串常量,例如 DIALOG。如果 name 为 null,则 getName() 返回的新 Font 的逻辑字体名称将设置为名称“Default”。

style - 字体的样式常量 style 参数是一个整数位掩码,可以是 PLAIN,也可以是 BOLD 和/或 ITALIC 的按位联合(例如,ITALIC 或 BOLD|ITALIC)。如果样式参数不符合预期的整数位掩码之一,则样式将设置为 PLAIN。

size - Fon 的点大小

正如您所看到的,它允许您根据现有字体创建新字体,您还可以更改样式和大小。

这是您可以遵循的教程


第二种解决方案:

正如评论中所述,您还可以使用Fontastic库,它似乎是创建新字体的绝佳工具,它允许您根据数据、传感器、实时提要或任何其他算法制作字体,或操纵现有字体来创建你自己的版本。

这些是向您展示其工作原理所需的基本步骤。有关完整参考,请参阅文档

如何创建新的 Fontastic 对象:

Fontastic f = new Fontastic(this, "ExampleFont");  // Create a new Fontastic object
Run Code Online (Sandbox Code Playgroud)

如何设置进一步的字体属性:

f.setAuthor("Andreas Koller"); 
           
Run Code Online (Sandbox Code Playgroud)

如何为字符 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);

         
Run Code Online (Sandbox Code Playgroud)

如何生成TrueType字体文件:

f.buildFont();  

                            
                                            
Run Code Online (Sandbox Code Playgroud)

事后清理方法:

f.cleanup();

              
Run Code Online (Sandbox Code Playgroud)

你可以看看他们的例子


结论:

但在这两种情况下,您将无法从手写扫描图像创建字体,Fantastic也不允许您从图像创建字体,但它使用矢量图形创建字体,因此在这种情况下,解决方案是:

  1. 使用其他工具将图像转换为矢量(Vector MagicInkscapemyScriptFont.com

  2. 然后Font使用生成的vectors.