当前位置: 首页 > 知识库问答 >
问题:

使用javafx创建Truetype字体文件

杜经艺
2023-03-14

我有一块帆布。它要求用户从a-Z、a-Z或0-9中绘制一个字符。一旦用户绘制了一个角色(比如a),当前画布对象将保存在画布的arraylist中。另一个空白画布弹出,要求用户绘制B,以此类推。

这些程序运行良好。但是我想创建一个。ttf文件,并绘制所有可接受的字符。

我在最后显示的画布下方有一个按钮,单击该按钮时,将从画布的arraylist中提取所有字符,并创建一个。ttf文件从中删除。但是怎么做呢?

共有2个答案

张鹏鹍
2023-03-14

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

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

根据指定的名称、样式和点大小创建新字体。字体名可以是字体面名,也可以是字体族名。它与样式一起使用,以找到合适的字体。指定字体族名时,样式参数用于从该族中选择最合适的字体。指定字体字体名称时,将合并字体的样式和样式参数,以找到来自同一系列的最佳匹配字体。

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

参数:

名称-字体名称。这可以是字体名称或字体系列名称,也可以表示此图形环境中的逻辑字体或物理字体。逻辑字体的族名称有:Dialog、DialogInput、等距、Serif或SansSerif。所有这些名称都有预定义的字符串常量,例如对话框。如果name为null,则getName()返回的新字体的逻辑字体名称将设置为名称“Default”。

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

大小-Fon的点大小

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

这是一个你可以遵循的教程。

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

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

如何创建新的Fontastic对象

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

如何设置其他字体属性:

f.setAuthor("Andreas Koller"); 
           

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

         

如何生成TrueType字体文件:

f.buildFont();  

                            
                                            

事后如何清理:

f.cleanup();

              

你可以看到他们的例子。

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

>

  • 使用另一个工具将图像转换为矢量(Vector Magic,Inkscape,myScriptFont.com)

    然后使用生成的向量创建字体

  • 史骏
    2023-03-14

    我使用过这个库:fontastic字体生成器

    这就是它的工作原理:

    如何创建新的Fontastic对象:

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

    如何设置其他字体属性:

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

    如何为具有四个点的随机形状的角色a创建glyph(这里是您之前从用户处收集的点(或标准化点)):

    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
    

    如何生成TrueType字体文件

    f.buildFont();                                  // Build the font resulting in .ttf and .woff files
                                                    // and a HTML template to preview the WOFF
    
     类似资料:
    • 问题内容: 有谁知道我如何在libGDX中使用TTF字体?我环顾四周,已经看到有关StbTrueTypeFont的信息,但似乎没有出现在最新版本中。 编辑:我发现StbTrueType字体的东西,jar文件位于扩展目录中。我已将其添加到我的项目中。现在,我只需要弄清楚如何使用它。有什么例子吗? 问题答案: 是的,您绝对需要按照编辑中的说明将jar 添加到项目中。很简单,这就是您将如何使用它的方法…

    • 问题内容: 这是我的Resources.class中的一种方法: 我的程序的结构是: 这是不起作用的代码片段: 当我打开PDF时,文本在那里,但是使用了一些字体(我猜是默认字体)。 注意1:我尝试将字体设置为仅短语(p)和仅段落(pa),但这丝毫没有改变输出。 注意2:Resource.loadFont(“ wingding”); try / catch方法没有“捕获”任何错误。 问题答案: 尝试

    • 你知道我该怎么做吗?

    • 早上好 我有一个新手PDFbox的问题,我希望一些帮助... 我刚刚(上周)从github下载了最新的PDFbox源代码,正在尝试创建HelloWorldOTF。java,基于HelloWorldTTF。java示例,希望创建一个PDF文件,该文件使用OTF字体(本例中为Adobe Caslon Pro Regular)将文本添加到输出PDF中。 到目前为止,我有以下信息: 我可以使用以下代码加载

    • 我的目标是创建一个六边形瓷砖的领域。我已经有了一个单元格矩阵,每个单元格的高度足以适合完整的六边形图像: 我的问题不是垂直间隙,我可以通过将网格窗格的添加到一个适当的值来确定垂直间隙。对我来说,困难是将每第二行向右移动半个单元宽度。 我怎样才能最好地实现每隔一排的移位?

    • 您可以将日文字体和西文字体中的字符混合起来,用做一种复合字体。复合字体显示在字体列表的起始处。 重要说明:复合字体必须基于日文字体,例如,无法创建包含中文或韩文字体的字体,也无法使用从其他应用程序复制的基于中文或韩文的复合字体。 1 选择 “文字 ”>“复合字体 ”。如果看不到此命令,则可以在 “文字 ”首选项中选择 “显示亚洲语言选项 ”。 2 单击 “新建 ”,输入复合字体的名称,然后单击 “