首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用javafx创建Truetype字体文件

用javafx创建Truetype字体文件
EN

Stack Overflow用户
提问于 2014-10-13 04:09:33
回答 2查看 2.4K关注 0票数 34

我有画布。它要求用户从a、a或0-9绘制一个字符.一旦用户绘制了一个字符,比如说A,当前的画布对象就会保存在画布的数组列表中。另一个空白的画布弹出,它要求用户绘制B,等等。

程序运行得很好。但是我想要创建一个.ttf文件,其中包含所有可接受的字符。

在最后显示的画布下面有一个按钮,当单击它时,将从画布数组中提取所有字符,并从其中创建一个.ttf文件。但是怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-24 07:35:43

第一解决方案:

您可以使用java.awt.Font,它是一个用于管理和创建字体的Java类,您可以使用它的字体(字符串名称、int样式、int大小)构造函数来创建您的自定义字体:

字体(字符串名称、int样式、int大小): 根据指定的名称、样式和点大小创建新字体。字体名称可以是字体外观名称,也可以是字体家族名称。它与样式一起使用,以找到合适的字体面。当指定字体族名时,样式参数将用于从家族中选择最合适的面孔。当指定字体脸名时,将脸的样式和样式参数合并,以找到来自同一家族的最佳匹配字体。 例如,如果使用样式Font.ITALIC指定面部名称"Arial“,则字体系统将在"Arial”系列中查找粗体和斜体的脸,并可能将字体实例与物理字体面"Arial意大利“相关联。样式参数与指定的脸的样式合并,而不是添加或减去。这意味着,指定粗体脸和粗体样式并不会使字体更加大胆,而指定粗体和普通样式并不能减轻字体的影响。 参数: 名字-字体名。这可以是字体外观名称或字体家族名称,也可以表示在此GraphicsEnvironment中找到的逻辑字体或物理字体。逻辑字体的族名是: Dialog、DialogInput、Monospaced、Serif或SansSerif。所有这些名称都存在预定义的字符串常量,例如,对话框.如果名称为null,则将getName()返回的新字体的逻辑字体名称设置为"Default“。 样式-字体的样式常量样式参数是一个整数位掩码,可以是普通的,也可以是粗体和/或斜体(例如,斜体或粗体)的按位合并。如果样式参数不符合预期的整数位掩码之一,则样式设置为朴素。 大小- Fon的点大小

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

这是您可以跟踪的教程

第二个解决方案:

正如注释中所述,您还可以使用防腐剂库,它似乎是创建新字体的一个很好的工具,它允许您根据数据、传感器、活动提要或任何其他算法制作字体,或者操作现有字体以创建自己的版本。

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

如何创建一个新的创建对象:

代码语言:javascript
复制
Fontastic f = new Fontastic(this, "ExampleFont");  // Create a new Fontastic object

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

代码语言:javascript
复制
f.setAuthor("Andreas Koller"); 

如何为字符A创建具有四点随机形状的字形:

代码语言:javascript
复制
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字体文件:

代码语言:javascript
复制
f.buildFont();  

如何在事后清理:

代码语言:javascript
复制
f.cleanup();

你可以看到他们的例子

结论:

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

  1. 使用另一个工具将图像转换为矢量(矢量幻象InkscapemyScriptFont.com)
  2. 然后使用生成的Font创建您的vectors
票数 3
EN

Stack Overflow用户

发布于 2015-08-24 06:34:49

我使用过这个库:字体造型机

这就是它的工作原理:

如何创建一个新的创建对象:

代码语言:javascript
复制
Fontastic f = new Fontastic(this, "ExampleFont");  // Create a new Fontastic object

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

代码语言:javascript
复制
f.setAuthor("Andreas Koller");                  // Set author name - will be saved in TTF file too

如何为字符A创建一个字形为四个点的随机形状(以下是您之前从用户收集到的点(或规范化点)):

代码语言:javascript
复制
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字体文件:

代码语言:javascript
复制
f.buildFont();                                  // Build the font resulting in .ttf and .woff files
                                                // and a HTML template to preview the WOFF
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26332766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档