【问题标题】:How to draw the Glyph on canvas from .ttf file [duplicate]如何从.ttf文件在画布上绘制字形[重复]
【发布时间】:2012-07-16 00:32:57
【问题描述】:

Android 不正确支持Urdu Nastaliq 字体(单词被打散并且单词的确切形状(Nastaliq)未制作)。

我为此使用了字体

TextView tx=(TextView)this.findViewById(R.id.tt);
tx.setTypeface(Typeface.createFromAsset(getAssets(),"TTF font Path"));

我能够使用 AWT 包在 java 中获得 Nastaliq 字体的确切格式,例如

Font font = Font.createFont(Font.TRUETYPE_FONT, new File("Path for ttf file"));
Font dynamicFont32Pt =   font.deriveFont (32f);
JLabel textLabel = new JLabel(textMessage);
textLabel.setFont(dynamicFont32Pt);

但是 Android 也不能正确支持 AWT 包(java.awt.Font.createFont()deriveFont()),所以我们决定为 Urdu 的 .ttf 文件制作一个渲染引擎。

现在我的问题是-

  1. 我们能否在不需要渲染引擎的情况下在 Android 中(正确地)渲染 urdu 字体? 如果没有,那么
  2. 如何在 Android 中读取 .ttf 文件(所有表格,如“glyp”、“head”)?
  3. 如何绘制TTF字体,即不需要PNG的矢量字体?

【问题讨论】:

    标签: android truetype


    【解决方案1】:

    Extracting glyph-path information from ttf files 问题的答案可能会让您感兴趣:基本上,它指向 Batik 库,该库具有在 Java 中解析 TTF 文件(将其转换为 SVG)的代码。

    【讨论】:

      【解决方案2】:

      你应该检查我的问题How to use kerning pairs extracted from a TTF file to correctly show glyphs as Path2D in Java?。而不是蜡染,我建议使用Apache FOP。它简单易用。优点是您只需阅读一次字体并将字形嵌入到您的应用程序中。但是,Apache FOP 仅适用于 TTF,不适用于 OTF(也有可能,但我仍在努力)。 Batik 使用 Java AWT 来呈现字符串。问题是您的应用程序每次运行时都需要读取字体文件。在我建议的方法中,您可以使用嵌入式迷你矢量化字体,或者您可以将嵌入式矢量化字符串用于小文本。这种方法的问题是宽度只能在绘画时间内正常工作。为了能够使用您使用 awt 从字体文件中恢复的字形,您需要直接从文件中读取字距调整对和宽度,以便能够正确显示文本。这在question 的答案中进行了解释。还要检查问题How to read kerning pairs table from TTF file in Android?。使用矢量化字形的优点是您的应用独立于字体文件和操作系统。

      你可以看到我在 Windows 上使用这个系统,但你可以在 Android 上做同样的事情。字体在 Windows 上更容易处理,并且大多数字体都是 TTF。实际上,您可以在 Windows 上开发矢量化字体,然后在 Android 中使用生成的类。这就是这种方法的美妙之处。我使用println 生成我的字体并将其复制并粘贴到一个新的类文件中。我什至懒得写文件。

      【讨论】:

        猜你喜欢
        • 2011-05-01
        • 1970-01-01
        • 2013-01-24
        • 1970-01-01
        • 2018-01-14
        • 1970-01-01
        • 2011-06-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多